在花费大量时间解决此错误后,我来这里询问是否有人对此错误有一些了解。我加载了两个实体,一个公园实体和一个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]);
}
有人有什么想法吗?
谢谢!
我有这个完全相同的错误,在我的情况下,它是在尝试执行NSBatchDeleteRequest
之后在插入项上发生的。问题是执行NSBatchDeleteRequest
之后,我没有调用[self.context reset]
方法。
根据WWDC 2015演讲,批处理更新/删除会绕过上下文并直接修改持久性存储文件。因此,如果不调用reset
,则上下文将包含已删除的对象,这些对象可能导致您遇到上述合并冲突。