Programming

특정 객체 ID에서 Core Data 객체를 얻는 방법은 무엇입니까?

procodes 2020. 7. 18. 23:31
반응형

특정 객체 ID에서 Core Data 객체를 얻는 방법은 무엇입니까?


다음 코드를 사용하여 Core Data에서 객체의 ID를 쉽게 얻을 수 있습니다.

NSManagedObjectID *moID = [managedObject objectID];

그러나 특정 객체 ID를 부여하여 코어 데이터 저장소에서 객체를 가져 오는 방법이 있습니까? NSFetchRequest를 사용하여 다음과 같이 할 수 있음을 알고 있습니다.

NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
NSEntityDescription *entity = [NSEntityDescription entityForName:@"Document" inManagedObjectContext:managedObjectContext];
[fetchRequest setEntity:entity];

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"(objectID = %@)", myObjectID];
[fetchRequest setPredicate:predicate];

그러나 자체 가져 오기 요청을 시작하지 않는 방식으로 수행하고 싶습니다. 어떤 아이디어?


당신이 원하는 :

-(NSManagedObject *)existingObjectWithID:(NSManagedObjectID *)objectID
                                   error:(NSError **)error

해당 ID를 가진 상점에서 오브젝트를 가져 오거나 존재하지 않는 경우 nil을 가져옵니다.

(주의 : NSManagedObjectContext에는 비슷한 이름을 가진 두 가지 방법이 있습니다.이 이름을 그대로 유지하려면 다른 두 가지 방법이 있습니다.

-(NSManagedObject *)objectWithID:(NSManagedObjectID *)objectID

... 그러한 오브젝트가 실제로 상점에 존재 하는지 여부에 관계없이 제공된 objectID로 결함 오브젝트를 작성합니다 . 존재하지 않는 경우, NSManagedObjectContext 's로 객체를 먼저 삽입하지 않으면 결함을 발생시키는 모든 것이 실패합니다 insertObject:. 내가 찾은 유일한 용도는 ObjectID를 유지하면서 상점간에 객체를 복사하는 것입니다.

-(NSManagedObject *)objectRegisteredForID:(NSManagedObjectID *)objectID

... 이 managedObjectContext에 의해 상점에서 페치 된 경우 해당 ID를 가진 오브젝트를 리턴합니다 . 이 방법이 유용한 지 아는 사람은 의견을 말하십시오.)

[eta .: 첫 번째 방법과 다른 두 가지 방법의 또 다른 중요한 차이점은 existingObjectWithID:error:절대 오류를 반환하지 않는다는 것입니다. 항상 전체 객체를 가져옵니다. 당신이 피하려고하는 경우 (함께 예를 들어 작업을 비용이 드는 가져 큰 덩어리 속성을 가진 개체), 당신이 영리해야 objectWithID:또는 objectRegisteredForID:화재 결함하지 않는; 또는 올바르게 구성된 페치 요청을 사용하십시오.]


objectWithID:찾고자하는 방법이며 권장되는 방법입니다. objectWithID:NSManagedObjectContext를 효율적으로 사용하여 다른 방법과 달리 필요한만큼만 개체를 ​​가져옵니다. objectWithID:백업 저장소로 이동하기 전에 상위 컨텍스트, 영구 저장소 코디네이터 및 영구 저장소 자체에서 인 메모리 정보를 올바르게 사용합니다.

이는 WWDC 2012 세션 "핵심 데이터 모범 사례" 에서 자세히 다룹니다 .


스위프트 5 버전 :

https://developer.apple.com/documentation/coredata/nsmanagedobjectcontext/1506686-existingobject

object(with:)또는 방법도 있습니다 registeredObject(for:). 필요한 것에 따라.

참고 URL : https://stackoverflow.com/questions/5035057/how-to-get-core-data-object-from-specific-object-id

반응형