我正在做一些将从MyAPI下载数据并重复保存到核心数据的函数
例如
======================
=========================
可能是那样的时候..当函数还没有完成时,我在不同的线程一次又一次地调用该方法
当我使用此函数提交该线程时
+(void)commit {
// get the moc for this thread
NSManagedObjectContext *moc = [self managedObjectContext];
NSThread *thread = [NSThread currentThread];
DLog(@"threadKey commit%@" , [[self class]threadKey]);
if ([thread isMainThread] == NO) {
// only observe notifications other than the main thread
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(contextDidSave:) name:NSManagedObjectContextDidSaveNotification object:moc];
}
NSError *error;
if (![moc save:&error]) {
DLog(@"Error in Saving %@", error);
dispatch_async(dispatch_get_main_queue(), ^{
//NSString * temp= [NSString stringWithFormat: @"There is error In Saving.. Contact us! :P",error];
//[[BNUtilitiesQuick UtilitiesQuick] Alert:temp];
});
}
if ([thread isMainThread] == NO) {
[[NSNotificationCenter defaultCenter] removeObserver:self name:NSManagedObjectContextDidSaveNotification object:moc];
}
}
(此代码将所有数据保存到缓存中。)
有错误,错误就是那个
"NSMergeConflict (0x1205b7f0) for NSManagedObject (0x10900d70) with objectID
'0x10cad920 <x-coredata://60AE38D6-EE4C-4FE1-9B9A-5322E301E7D5/City/p2>' with oldVersion = 20 and newVersion = 21 and old object snapshot =
{\n Country = \"0x10611dd0 <x-coredata://60AE38D6-EE4C-4FE1-9B9A-5322E301E7D5/Country/p1>\";\n Name = \"Jakarta Barat\";\n} and new cached row =
{\n Country = \"0x1019e1f0 <x-coredata://60AE38D6-EE4C-4FE1-9B9A-5322E301E7D5/Country/p1>\";\n Name = \"Jakarta Barat\";\n}"
任何人都能告诉我它有什么错误吗?
例如,什么是0x10611dd0?那是记忆位置吗?
核心数据ID是什么?
错误如何显示?看起来像coredata试图合并已经相同的变化。
是几个线程同时管理DIFFERENT managedobjectcontext。所有这些coredata都拥有相同的持久存储。
答案 0 :(得分:0)
这里的问题是您尝试将两个对象与相同的objectID合并但Country的值不同。国家/地区之后的十六进制是此属性的地址,因此您似乎为该国家/地区设置了两个不同的对象,这会导致合并错误。