我有一个NSOperationQueue根据猫的喜好生成猫玩具。操作定义如下:
- (void)main {
@autoreleasepool {
self.context = [NSManagedObjectContext MR_context];
Cat *cat = (Cat*)[self.context objectWithID:self.objectId];
CatToyMaker *toyMaker = [[CatToyMaker alloc] init];
[toyMaker toysForPrefs:cat.prefs completion:^(NSDictionary *toys) {
[MagicalRecord saveWithBlock:^(NSManagedObjectContext *localContext) {
cat.toys = toys;
}];
}];
}
}
我知道这不是很正确。事实上我遇到了这样的崩溃:
*** Terminating app due to uncaught exception 'NSObjectInaccessibleException', reason: 'CoreData could not fulfill a fault for '0x176338e0 <x-coredata://3FDAE17B-0998-4AB2-B5B8-4F94D6CE9C05/Cat/p226>''
在完成区中将玩具保存到猫实体的正确方法是什么?
答案 0 :(得分:0)
你需要:
你有前两个步骤,但你的最后一步是保存不同的上下文,因此导致问题。试试这个:
- (void)main
{
@autoreleasepool {
self.context = [NSManagedObjectContext MR_context];
Cat *cat = [self.context objectWithID:self.objectId];
CatToyMaker *toyMaker = [[CatToyMaker alloc] init];
[toyMaker toysForPrefs:cat.prefs completion:^(NSDictionary *toys) {
cat.toys = toys;
[self.context MR_saveToPersistentStoreAndWait];
}];
}
}