Я разрабатываю приложение с помощью Core Data, и мне нужно выполнить некоторые вычисления в фоновом потоке, чтобы создать XML-файл на основе определенных NSManagedObject
.
Следуя документации, я настроил подкласс NSOperation
. Этот класс имеет свойство, подобное следующему:
@property (nonatomic, retain) NSArray* objectIDs;
где objectIDs
- массив идентификаторов управляемых объектов (типа NSManagedObjectID
). Это необходимо в соответствии с документацией: NSManagedObject
не являются потокобезопасными.
Внутри подкласса main
из NSOperation
я делаю следующее:
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
NSManagedObjectContext *exportContext = [[NSManagedObjectContext alloc] init];
[exportContext setPersistentStoreCoordinator:[self persistentStoreCoordinator]];
for (NSManagedObjectID* objectID in self.orderObjectIDs) {
NSError* error = nil;
Order* order = (Order*)[exportContext existingObjectWithID:objectID error:&error];
// order.someRelationship is fault here...
// Create XML file here...
}
[exportContext reset];
[exportContext release], exportContext = nil;
[[NSNotificationCenter defaultCenter] postNotificationName:kRegisterComplete object:self];
[pool drain];
pool = nil;
Внутри цикла for
я выбираю нужный объект, используя метод existingObjectWithID:error
класса NSManagedObjectContext
, начиная с
В отличие от objectWithID: этот метод никогда не возвращает ошибку.
Метод работает. Я могу получить свойства этого найденного объекта. Единственная проблема заключается в том, что отношения выбираются как ошибки.
Сказал, у меня два вопроса.
Во-первых, это правильный подход к fecth NSManagedObject
в фоновом потоке?
Затем, как я могу получить отношения для каждого выбранного объекта в цикле for
? Нужно ли создавать NSFetchedRequest
для извлечения объекта отношения на основе конкретного объекта, который был выбран через идентификатор?
Заранее спасибо.