在重新排序的NSOrderedSet上更改数据时的NSMergeConflict

时间:2013-10-26 21:23:19

标签: iphone ipad core-data

我的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}“ )},

0 个答案:

没有答案