我的NSOrderedSets遇到了问题。
我有coredata实体 - 'Project'和'Drawing'。一个项目有很多图纸。关系是一对多和有序的,因此我的Project对象包含一个NSOrdered的图纸集。
我的应用程序是单线程的,如果希望我重新订购我的Drawing对象,会让我头疼。
我使用以下代码重新订购图纸......
-(IBAction)onTestReOrder:(id)sender
{
NSMutableOrderedSet *exchange = [self.currentProject.drawings mutableCopy];
[exchange exchangeObjectAtIndex:0 withObjectAtIndex:1];
self.currentProject.drawings = exchange;
// Save
id delegate = [[UIApplication sharedApplication]delegate];
NSManagedObjectContext *managedObjectContext = [delegate managedObjectContext];
NSError *error = nil;
if( ![managedObjectContext save:&error] )
{
NSLog(@"%@ Save: Unresolved Error on Save %@, %@", methodName, error, [error userInfo] );
abort();
}
}
这一切似乎都运作良好。我的底层Sqlite数据存储区似乎已更新,以反映重新排序。
当我在重新订购后尝试在我的绘图中写一个属性的更改时,我的问题出现了。例如......
drawing = [self.currentProject.drawings objectAtIndex:1];
drawing.current = [NSNumber numberWithBool:YES];
// Save....causes NSMergeConflict
id delegate = [[UIApplication sharedApplication]delegate];
NSManagedObjectContext *managedObjectContext = [delegate managedObjectContext];
NSError *error = nil;
// BANG ON SAVE....NSMergeConflict
if( ![managedObjectContext save:&error] )
{
NSLog(@"%@ Save: Unresolved Error on Save %@, %@", methodName, error, [error userInfo] );
abort();
}
此处的保存调用会创建一个NSMergeConflict。看一下快照,看起来Draw的项目在Old和New之间是不同的,但这是一个单线程应用程序,只有一个ManagedObjectContext。我怎样才能对“项目”有不同的引用?
我正在拉这个头发,任何提示帮助我解决NSMergeConflict都非常感激。
/飞图
...错误
2013-10-26 23:40:38.047 testDesign [34625:a0b] setCurrentDrawing保存:保存错误域上的未解决错误= NSCocoaErrorDomain代码= 133020“操作无法完成。(Cocoa error 133020.)”UserInfo = 0xc148180 {conflictList =( “NSMergeConflict(0xc151860)for NSManagedObject(0xb3f0030)with objectID'0xb379040'with oldVersion = 58 and newVersion = 59 and old object snapshot = {\ n angle = 0; \ n current = 1; \ n depth = \”4.8768 \“ ; \ n project = \“0xb3eec60 \”; \ n offsetX = 0; \ n offsetY = 0; \ n type = 0; \ n width = \“9.7536 \”; \ n}和新的缓存行= {\ n angle = 0; \ n current = 1; \ n depth = \“4.8768 \”; \ n project = \“0xc1f3cb0 \”; \ n offsetX = 0; \ n offsetY = 0; \ n type = 0; \ n width = \“9.7536 \”; \ n}“ )},