1

我的 NSOrderedSets 有问题。

我有 coredata 实体 - “项目”和“绘图”。一个项目有许多图纸。这种关系是一对多和有序的,因此我的项目对象包含一个 NSOrderedSet 的绘图。

我的应用程序是单线程的,如果我希望重新排序我的绘图对象,我会很头疼。

我使用以下代码重新订购图纸...

-(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();
}

此处的 Save 调用会创建 NSMergeConflict。查看快照,似乎旧的和新的绘图项目不同,但这是一个单线程应用程序,只有一个 ManagedObjectContext。我怎样才能对“项目”有不同的引用?

我在这个问题上大发雷霆,非常感谢任何帮助我解决 NSMergeConflict 的提示。

/适合

错误...

2013-10-26 23:40:38.047 testDesign[34625:a0b] setCurrentDrawing Save: Unresolved Error on Save Error Domain=NSCocoaErrorDomain Code=133020 “操作无法完成。(Cocoa 错误 133020。)” UserInfo=0xc148180 { conflictList=("NSManagedObject (0xb3f0030) 的 NSMergeConflict (0xc151860),objectID 为 '0xb379040',oldVersion = 58 和 newVersion = 59,旧对象快照 = {\n 角度 = 0;\n 当前 = 1;\n 深度 = \" 4.8768\";\n project = \"0xb3eec60 \";\n offsetX = 0;\n offsetY = 0;\n type = 0;\n width = \"9.7536\";\n} 和新缓存行 = {\n 角度 = 0;\n 当前 = 1;\n 深度 = \"4.8768\";\n 项目 = \"0xc1f3cb0 \";\n offsetX = 0;\n offsetY = 0;\n type = 0 ;\n 宽度 = \"9.7536\";\n}")},

4

0 回答 0