NSMergeConflict with newVersion =

问题描述 投票:3回答:1

在花费大量时间解决此错误后,我来这里询问是否有人对此错误有一些了解。我加载了两个实体,一个公园实体和一个GuidedTour实体。一个Paks可能与许多GuidedTours有关,但是当我尝试保存它时,错误提示:

Error Domain = NSCocoaErrorDomain代码= 133020“(null)” UserInfo = {conflictList =(“带有对象ID'0xd000000000240002'的NSManagedObject(0x1740d94b0)的NSMergeConflict(0x17026afc0),其中oldVersion = 0和newVersion =且旧的缓存行= {\ n language = \“ de_DE \”; \ n text = \“ Apapapapapa” ...}

我不明白这是什么错误,我的合并策略是:NSMergeByPropertyStoreTrumpMergePolicyType

和我的代码:

AppDelegate appDelegate =(AppDelegate)[[UIApplication sharedApplication]委托];self.context = [appDelegatemanagedObjectContext];

NSError *error = nil;

NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];

NSEntityDescription *entity = [NSEntityDescription entityForName:@"GuidedTours" inManagedObjectContext:self.context ];
[fetchRequest setEntity:entity];

NSArray *fetchedObjects = [self.context  executeFetchRequest:fetchRequest error:&error];

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"guided_tours_parks == NULL"];
fetchedObjects = [fetchedObjects filteredArrayUsingPredicate:predicate];

GuidedTours *tour = [fetchedObjects firstObject];



fetchRequest = [[NSFetchRequest alloc] init];

NSEntityDescription *entityPark = [NSEntityDescription entityForName:@"Parks" inManagedObjectContext:self.context ];
[fetchRequest setEntity:entityPark];

fetchedObjects = [self.context  executeFetchRequest:fetchRequest error:&error];

predicate = [NSPredicate predicateWithFormat:@"name == %@",[jsonData objectForKey:@"Park ID"] ];
fetchedObjects = [fetchedObjects filteredArrayUsingPredicate:predicate];

Parks *park = [fetchedObjects firstObject];


[tour setGuided_tours_parks:park];

[park addParks_guided_toursObject:tour];



// Save the object to persistent store
if (![self.context  save:&error]) {
    NSLog(@"Can't Save! %@ %@", error, [error localizedDescription]);
}

有人有什么想法吗?

谢谢!

ios objective-c core-data nsmanagedobject nsmanagedobjectcontext
1个回答
1
投票

我有这个完全相同的错误,在我的情况下,它是在尝试执行NSBatchDeleteRequest之后在插入项上发生的。问题是执行NSBatchDeleteRequest之后,我没有调用[self.context reset]方法。

根据WWDC 2015演讲,批处理更新/删除会绕过上下文并直接修改持久性存储文件。因此,如果不调用reset,则上下文将包含已删除的对象,这些对象可能导致您遇到上述合并冲突。

https://developer.apple.com/videos/play/wwdc2015/220/

© www.soinside.com 2019 - 2024. All rights reserved.