Chcę używać wielowątkowości z danymi podstawowymi. Analizuję plik xml w NSManageObject
s. Korzystam z poniższego kodu i pojawia się błąd runtime Can only use -performBlock: on an NSManagedObjectContext that was created with a queue
. Co jest nie tak?Może używać tylko -performBlock: w obiekcie NSManagedObjectContext utworzonym przy użyciu kolejki
//xmlParser
- (void)main
{
dispatch_queue_t queueB = dispatch_queue_create("Create Books", NULL);
dispatch_async(queueB, ^{
// Opening xml
// ...
NSManagedObjectContext* context = [[NSManagedObjectContext alloc] init];
[context setPersistentStoreCoordinator:mainContext].persistentStoreCoordinator];
[context performBlock:^{
// ...
[self _parseNode:container_node appendTo:books inContext:context];
// ...
NSError* error = nil;
[context save:&error];
[mainContext performBlock:^{
NSError* parentError = nil;
[mainContext save:&parentError];
}];
}];
[context release];
});
dispatch_release(queueB);
}
- (int)_parseNode:(axlNode*)inode appendTo:(NSMutableArray*)ioarray inContext:(NSManagedObjectContext*)context
{
// ...
[context executeFetchRequest:request error:&error];
//...
}
Jeśli tylko dokumentacja nie była tak nieprecyzyjna w tym punkcie ... Nadal pakowałem initWithConcurrencyType: w bloku wysyłkowym i tworząc kolejkę niestandardową, ponieważ dokumentacja podpowiadała, że musiałaś to zrobić ... Dzięki! –
@RobGlassey: Niestety, "Przewodnik programowania podstawowych danych" nie został jeszcze zaktualizowany dla nowych typów współbieżności, jest on udokumentowany tylko w ["Podstawowe informacje o wersji dla systemu OS X 10.7 i iOS 5.0"] (http: //developer.apple.com/library/ios/#releasenotes/DataManagement/RN-CoreData/index.html). –
Aha, tu jest! Wyczyść jak dzień. Jednak iOS 5 nie był tak długo w rzeczywistości ... prawdopodobnie przedłużyliby podstawowe informacje o tym rodzaju w główne przewodniki referencyjne. –