【发布时间】:2013-11-09 01:51:56
【问题描述】:
更新:我想问题是在保存子上下文时父上下文没有更新。不过,需要帮助。
我已经尝试了许多多上下文(父子)核心数据的示例。
以前我的应用程序使用传统的数据存储方式,即我使用了 OperationQueue,在其中我从服务器获取数据并使用 MOC 保存到数据库,并在保存时向 mainMOC 发送通知以 mergeChanges:NSManagedObjectContextDidSaveNotification。
在不干扰应用程序流程(即删除 OperationQueue)的情况下,我尝试实现父子 ManagedObjectContext 关系,其中我使用 concurrencyType 为 NSPrivateQueueConcurrencyType 的 privateMOC,它有一个 persistantStoreCoordinator,而 mainMOC 的 concurrenyType 为NSMainQueueConcurrencyType 是 privateMOC 的孩子。在队列中,我有一个 tempMOC,其 concurrencyType 为 NSPrivateQueueConcurrencyType,它是 mainMOC 的子对象。
在保存时,我将三个 MOC 的 performBlock 嵌套为 -
[tempMOC performBlock:^{
if (![tempMOC save:&error]) {
NSLog(@"Error : %@",error);
}
[mainMOC performBlock:^{
if (![mainMOC save:&error]) {
NSLog(@"Error : %@",error);
}
[privateMOC performBlock:^{
if (![privateMOC save:&error]) {
NSLog(@"Error : %@",error);
}
}];
}];
}];
在 mainMOC 尝试保存时,我收到类似 CoreData 1560 和 1570 的错误。 NSValidationErrorKeyerror 它说某个值是nil。
是不是 tempMOC 的变化不会转到 mainMOC ?我没有深入研究,但据我所知,它不应该是零。
可能是什么错误?请帮忙。
更新:我尝试打印 tempMOC 的对象,我看到了正确的值,例如:
<Element_Name: 0xc0b59c0> (entity: Element_Name; id: 0xc07ca90 <x-coredata:///Element_Name/t2DCD57A8-4C1A-4AF7-A10E-5B9603E2BB8730> ; data: {
tag1 = nil;
tag2 = 3430065;
tag3 = 600;
tag4 = N;
tag5 = "2013-10-29 00:00:00 +0000";
tag6 = nil;
tag7 = 327842701;
relation = "0xbf1f760 <x-coredata://87C54A94-701E-4108-826E-4D98A53380F9/Relation/p1>";
tag8 = "Some_Value";
我试图打印 mainMOC 的对象,我看到 nil 值而不是像这样的数据:
<Element_Name: 0xbd47a50> (entity: Element_name; id: 0xc0b14b0 <x-coredata:///Element_Name/t2DCD57A8-4C1A-4AF7-A10E-5B9603E2BB8740> ; data: {
tag1 = nil;
tag2 = nil;
tag3 = 0;
tag4 = nil;
tag5 = nil;
tag6 = nil;
tag7 = nil;
relation = "0xbd586c0 <x-coredata://87C54A94-701E-4108-826E-4D98A53380F9/relation/p1>";
tag8 = nil;
【问题讨论】:
标签: ios iphone objective-c core-data nsmanagedobjectcontext