[Ios] Как получить объект Core Data из определенного идентификатора объекта?


Answers

objectWithID: метод, который вы ищете, и это рекомендуемый способ сделать это. objectWithID: будет эффективно использовать NSManagedObjectContext, чтобы вытащить объект только на столько уровней, сколько необходимо - в отличие от некоторых других способов сделать это. objectWithID: будет правильно использовать информацию в памяти в родительских контекстах, постоянный координатор хранилища и постоянное хранилище перед тем, как перейти в хранилище резервных копий.

Это подробно освещено на сессии WWDC 2012 «Лучшие рекомендации по основным данным».

Question

Я могу легко получить идентификатор объекта в Core Data, используя следующий код:

NSManagedObjectID *moID = [managedObject objectID];

Однако есть ли способ получить объект из основного хранилища данных, указав ему конкретный идентификатор объекта? Я знаю, что могу это сделать, используя 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];

Тем не менее, я хотел бы сделать это так, чтобы не инициировать свой собственный запрос на выборку. Есть идеи?