单线程保存上的iOS7 NSMergeConflict

单线程保存上的iOS7 NSMergeConflict,第1张

概述在重新排序两行之后,在单线程应用程序上存在简单数据保存问题. 我已经设法简化了编码以重现错误,并希望与其他人一起尝试这一点的第二意见. 这是一个完整性检查,因为我怀疑iOS 7引入的核心数据问题,因为这在iOS 6中运行正常. 首先,启动一个新的核心数据项目并创建这个模型…… 属性’current’是可选的布尔值.一对多关系是有序关系,创建NSOrderedDataset. 现在为应用添加几个按钮 在重新排序两行之后,在单线程应用程序上存在简单数据保存问题.

我已经设法简化了编码以重现错误,并希望与其他人一起尝试这一点的第二意见.

这是一个完整性检查,因为我怀疑iOS 7引入的核心数据问题,因为这在iOS 6中运行正常.

首先,启动一个新的核心数据项目并创建这个模型……

属性’current’是可选的布尔值.一对多关系是有序关系,创建NSOrderedDataset.

现在为应用添加几个按钮;第一个创建数据(一个项目和两个相关的’图纸’),第二个交换两个图纸,然后在第一个图纸中设置一个属性.

这是代码……

-(IBAction)onTestbutton:(ID)sender{    ID delegate = [[UIApplication sharedApplication]delegate];    NSManagedobjectContext *managedobjectContext = [delegate managedobjectContext];    self.project = [NSEntityDescription insertNewObjectForEntityForname:@"Project" inManagedobjectContext:managedobjectContext];    Drawing *drawing1 = [NSEntityDescription insertNewObjectForEntityForname:@"Drawing" inManagedobjectContext:managedobjectContext];    Drawing *drawing2 = [NSEntityDescription insertNewObjectForEntityForname:@"Drawing" inManagedobjectContext:managedobjectContext];    NSMutableOrderedSet* tempSet = [NSMutableOrderedSet orderedSetWithOrderedSet:self.project.drawings];    [tempSet addobject:drawing1];    [tempSet addobject:drawing2];    self.project.drawings = tempSet;    [self save];}-(IBAction)onTestbutton2:(ID)sender{    NSMutableOrderedSet *exchange = [self.project mutableOrderedSetValueForKey:@"drawings"];    [exchange exchangeObjectAtIndex:0 withObjectAtIndex:1];    self.project.drawings = exchange;    [self save];    Drawing *drawing = [self.project.drawings objectAtIndex:0];    BOol current = [drawing.current boolValue];    drawing.current = [NSNumber numberWithBool:!current];    [self save];}-(voID)save{    ID delegate = [[UIApplication sharedApplication]delegate];    NSManagedobjectContext *managedobjectContext = [delegate managedobjectContext];    NSError *error = nil;    if( ![managedobjectContext save:&error] )    {        NSLog(@"%@ Save: Unresolved Error on Save %@",error,[error userInfo] );        abort();    }}

现在,按第一个测试按钮进行测试.这会设置数据.

然后按第二个测试按钮……一切OK!

现在再次按下第二个测试按钮并d出.您应该得到类似于此的NSMergeConflict错误….

Save: Unresolved Error on Save {
conflictList = (
“NSMergeConflict (0x8a7d0b0) for NSManagedobject (0x8bedfa0) with objectID ‘0x8bd9340
‘ with
oldVersion = 1 and newVersion = 2 and old object snapshot = {\n
current = \”\”;\n project = \”0x8bc3f50
\”;\n}
and new cached row = {\n current = \”\”;\n project =
\”0x8aa88c0
\”;\n}”
);

我从错误中注意到我的Project对象已经改变.但是,这是使用主应用程序上下文的单线程应用程序.

我花了太长时间在这上面,并希望其他人就问题所在地发表评论.这是一个核心数据错误,还是我是一个正确的’傻瓜’?

非常感谢

/适合

解决方法 我有类似的问题,找到了一个解决方法:

http://prod.lists.apple.com/archives/cocoa-dev/2013/Oct/msg00657.html

简而言之 – 将其添加到您的MOC设置中:

[_managedobjectContext setMergePolicy:[[NSMergePolicy alloc] initWithMergeType:NSMergeByPropertyObjectTrumpMergePolicyType]];

当使用NSsqlStoreType时,这也会影响OS X 10.9 Mavericks.我无法使用NSXMLStoreType重复合并错误.

对于Swift 2.x

managedobjectContext.mergePolicy = NSMergePolicy(mergeType: .MergeByPropertyObjectTrumpMergePolicyType)
总结

以上是内存溢出为你收集整理的单线程保存上的iOS7 NSMergeConflict全部内容,希望文章能够帮你解决单线程保存上的iOS7 NSMergeConflict所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1100819.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-28
下一篇 2022-05-28

发表评论

登录后才能评论

评论列表(0条)

保存