2016-08-09 2 views
0

핵심 데이터가 기본적으로 SQLite 데이터베이스라는 것을 알았습니다. 각 엔티티는 별도의 테이블입니다. 엔티티가 아닌 테이블도 있습니다 (예 : Z_METADATA, Z_MODELCACHEZ_PRIMARYKEY). 나는 그들이하는 일을 모른다.어떻게하면 NSManagedObject의 기본 키 값을 얻을 수 있습니까?

어쨌든 "엔티티 테이블"의 필드는 데이터 모델에서 추가 한 속성과 몇 가지 추가 기능과 거의 같습니다. 예를 들어, 내 엔티티가 date이라는 속성 하나만있는 경우를 예로들 수 있습니다. 표는 ZDATE 필드와 Z_PK, Z_ENTZ_OPT 필드를 포함합니다.

분명히 각 엔터티에는 Z_PK 필드에 저장된 기본 키가 있습니다! 이의 기본 키 값을 가져 오려고합니다. 그리고 특정 기본 키가있는 NSManagedObject에 대해 데이터베이스를 쿼리하려고합니다.

그래서 기본적으로,이 같은 일이 :

let pk = myManagedObject.primaryKey 
// the below should return myManagedObject 
managedObjContext.objectWithPrimaryKey(someEntityDescription, pk) 

나는 NSManagedObject에 대한 문서를 검색하고 objectID을 보았다. 그러나 나는 이것이 이것이라고 생각하지 않습니까?

+1

기본 키를 말할 때 Object ID를 참조한다고 생각합니다. http://stackoverflow.com/questions/901640/core-data-primary-key –

답변

1

핵심 데이터의 API가 SQL과 매우 다르므로 핵심 데이터는이를 지원하지 않습니다. SQL과 관련하여 생각한다면 핵심 데이터를 필요한 것보다 훨씬 더 어렵게 만들 것입니다. object(with:)가 빠르지 만 잠재적으로 덜 안전한 사용

let objectID = myManagedObject.objectID 

// Later 
let myManagedObject = context.object(with: objectID) 
// Or... 
let myManagedObject = context.existingObject(with: objectID) 

:

코드 스 니펫 (snippet)의 대략적인 핵심 데이터에 상당 (스위프트 3 구문을 사용하여) 같은 것을 할 것이다. existingObject(with:)을 사용하면 약간 느리지 만 안전합니다.

관련 문제