Работает на моем RSS Reader.Почему мой NSManagedObject не сохраняется после [moc save] PerformBlockAndWait?
Моя модель данных примерно состоит из следующей иерархии NSManagedObject
:
Category <---->> Feed <---->> Post
Мое приложение использует следующее:
«корневой»
NSManagedObjectContext
с типомNSPrivateQueueConcurrencyType
параллелизмом. Я использую этот MOC для сохранения изменений вNSPersistentStoreCoordinator
.a "main"
NSManagedObjectContext
сNSMainQueueConcurrencyType
Тип параллелизма. Я использую этот MOC для подачи моего графического интерфейса.«Местный»
NSManagedObjectContext
сNSPrivateQueueConcurrencyType
Тип параллелизма. Я создаю и использую этот MOC каждый раз, когда я запускаю новые объекты Posts.
Как только загружается MainViewController
, он заполняется, если пуст.
В конце метода populate
, я убедиться, что все в правильно сохранялось, а также refetch мои данные:
[_mainMOC performBlockAndWait:^{
NSError *error;
if (![_mainMOC save:&error]) {
NSLog(@"[MainViewController::populate] Error.mainMOC: %@\n%@", [error description], [error userInfo]);
}
[[_mainMOC parentContext] performBlockAndWait:^{
NSError *error;
if (![[_mainMOC parentContext] save:&error]) {
NSLog(@"[MainViewController::populate] Error.saveMOC: %@\n%@", [error description], [error userInfo]);
}
}];
NSLog(@"[MainViewController::populate] OK.saveMOC");
}];
NSLog(@"[MainViewController::populate] OK.mainMOC");
[_mainMOC performBlock:^{
NSError *error;
if (![_mainMOC executeFetchRequest:[_fetchedResultsController fetchRequest] error:&error]) {
NSLog(@"[MainViewController::populate] refetch: %@\n%@", [error description], [error userInfo]);
}
}];
Несмотря на это, я не могу создать Post
S в моих Feed
с в специальный `localMOC`` :
NSManagedObjectID *feedID=[f objectID];
if ([feedID isTemporaryID]) {
NSLog(@"Warning %@ has not yet been persisted!", f.name);
}
/* ... */
NSManagedObjectContext *localMOC;
localMOC = [[NSManagedObjectContext alloc] initWithConcurrencyType:NSPrivateQueueConcurrencyType];
[localMOC setParentContext:self.mainMOC];
/* ... */
[localMOC performBlock:^{
NSError *error=nil;
Feed *feed=((Feed *)[localMOC existingObjectWithID:feedID error:&error]);
if (error) {
NSLog(@"[MAsterViewController::fetchPosts] %@\n%@", [error localizedDescription], [error userInfo]);
return;
}
/* ... */
выше бит кода дает следующий протокол:
2013-11-14 19:24:04.847 uRSS[10907:70b] Warning Maddox has not yet been persisted!
2013-11-14 19:24:04.847 uRSS[10907:1303] [MAsterViewController::fetchPosts] The operation couldn’t be completed. (Cocoa error 133000.)
Может ли кто-нибудь сказать мне, что здесь происходит не так? Спасибо!
Здравствуйте, * Спасибо * много за вашу помощь. Итак, я думаю, что мой многократный блок 'performBlockAndWait ... save'' не имеет никакого эффекта? – mirx
Поскольку контекст 'local' не сохранялся и не смог изменить объект, то нет. но все изменения, внесенные в «основной» контекст, будут сохраняться. –