有时我在同一个地方有coredata这个错误.有时它确定,在其他时间我有这个错误.这是什么意思?我找不到任何关于它的东西:(
抱歉我的英语:)
照片; id:0xd431570; 数据:{\n aid = 121594781; \n album = nil; \n comments = \\"\\"; \n commentsCount = 0; \n created = \\"2010-12-10 03:43:01 GMT \\"; \n owner = \\"0xd41b500 \\"; \n \\"owner_id \\"= 79185807; \n photosNumber = 0; \n pid = 196997029; \n src = \\"http:/ /cs10609.vkontakte.ru/u79185807/121594781/m_\\";\n \\"src_big \\"= \\"http://cs10609.vkontakte.ru/u79185807/121594781/x_ \\"; \n \\"src_small \\"= \\"http://cs10609.vkontakte.ru/u79185807/121594781/s_ \\"; \n \\"src_xbig \\"= nil; \n \\"src_xxbig \\ "= nil; \n wallRel = \\"0xd42d500 \\"; \n})\n)} \"; \n rate = \" - 19 \"; \n sex = 0; \nstatuses = \" {(\n)} \"; \n timezone = 0; \n uid = 79185807;
Jus*_*ers 33
当您的数据库从两个不同的位置更改,然后从两个不同的位置保存时,有时会导致合并冲突; 在某些情况下,更改可能会影响相同的对象或属性,并且Core Data不会自动覆盖它们,因为这可能会破坏有价值的数据.
有几个选择:
小智 11
简而言之 - 启用合并策略将此添加到您的MOC设置:
客观-C
[_managedObjectContext setMergePolicy:[[NSMergePolicy alloc] initWithMergeType:NSMergeByPropertyObjectTrumpMergePolicyType]];
Run Code Online (Sandbox Code Playgroud)
迅速
lazy var managedObjectContext: NSManagedObjectContext? = {
let coordinator = self.persistentStoreCoordinator
if coordinator == nil {
return nil
}
var managedObjectContext = NSManagedObjectContext()
managedObjectContext.persistentStoreCoordinator = coordinator
//add this line
managedObjectContext.mergePolicy = NSMergePolicy(mergeType: NSMergePolicyType.MergeByPropertyObjectTrumpMergePolicyType);
return managedObjectContext
}()
Run Code Online (Sandbox Code Playgroud)
我得到了相同的合并冲突,同时保存了上下文.在这里看到苹果医生
我使用NSMergePolicy解决了冲突
- (BOOL)resolveConflicts:(NSArray *)list error:(NSError **)error
Run Code Online (Sandbox Code Playgroud)
NSOverwriteMergePolicyType在创建NSMergePolicy对象时将policyType 设置为
NSOverwriteMergePolicyType:指定在持久存储中覆盖冲突中已更改对象的状态的策略.
`
if ([managedObjectContext hasChanges] && ![managedObjectContext save:&error]) {
NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
NSArray * conflictListArray = (NSArray*)[[error userInfo] objectForKey:@"conflictList"];
NSLog(@"conflict array: %@",conflictListArray);
NSError * conflictFixError = nil;
if ([conflictListArray count] > 0) {
NSMergePolicy *mergePolicy = [[NSMergePolicy alloc] initWithMergeType:NSOverwriteMergePolicyType];
if (![mergePolicy resolveConflicts:conflictListArray error:&conflictFixError]) {
NSLog(@"Unresolved conflict error %@, %@", conflictFixError, [conflictFixError userInfo]);
NSLog(@"abort");
abort();
}
} }
Run Code Online (Sandbox Code Playgroud)
雨燕4
private(set) lazy var mainContext: NSManagedObjectContext = {
let context = NSManagedObjectContext(concurrencyType: .mainQueueConcurrencyType)
context.parent = privateContext
context.mergePolicy = NSMergePolicy(merge: .overwriteMergePolicyType)
// Or we can use Trumping
// .mergeByPropertyObjectTrumpMergePolicyType
// .mergeByPropertyStoreTrumpMergePolicyType
// Rolling back is another option
// .rollbackMergePolicyType
return context
}()
Run Code Online (Sandbox Code Playgroud)