2011-09-09 5 views
0

나는 MyAPI에서 데이터를 Donwload 및 repeatly 핵심 데이터스레드를 커밋 할 때 NSMergeConflict 문제가 발생합니까?

예를

======================

에 저장됩니다 SomeFunction을하고있는 중이 야
  ========================= 

그런 시간이 될 수있다 .. 함수가 아직 완료되지 않은 경우 나는이 기능을 스레드를 저지 생각하면, 내가 다른 스레드

에서 또 다시 그 메소드를 호출

,451,515,
+(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는 이미 동일한 변경 사항을 병합하려고합니다.

예 여러 스레드가 다른 managedobjectcontext를 동시에 관리합니다. 모든 coredata에는 동일한 영구 저장소가 있습니다.

답변

0

여기서 문제는 동일한 objectID를 가진 두 개체를 병합하려고하지만 국가에 대해 다른 값을 사용한다는 것입니다. country 다음의 16 진수는이 속성의 주소이므로 국가에 대해 서로 다른 두 개의 개체가 설정되어있어 병합 오류가 발생하는 것으로 보입니다.

관련 문제