2013-08-13 4 views
1

Entity Reservation에서 일부 개체를 삭제하려고합니다. 나는 이렇게하고있다.관리 대상 개체가 내 핵심 데이터베이스에서 올바르게 삭제되지 않았습니다.

NSManagedObjectContext *context = reservation.managedObjectContext; 
[context deleteObject:reservation]; 
NSError *error = nil; 
if (![context save:&error]) { 
    NSLog(@"Error is %@",error); 
} 

그 후 나는 다시 전체 entity를 가져 내 개체를 삭제합니다. 개체가 내 entity에서 삭제 된 것을 볼 수 있습니다. 하지만 내 응용 프로그램을 다시 시작하면 이전 세션에서 삭제 한 모든 객체가 내 entity에 다시 저장됩니다.

웹 서비스에서받은 객체를 저장하기 위해 restkit을 사용하고 있습니다. 또한 개체를 삭제하면 내 데이터베이스에서도 삭제됩니다.

내 응용 프로그램을 다시 시작하고 내 기록을 보면 이전 세션에서 삭제 한 웹 서비스에서 개체를 가져 오지 않았으므로 괜찮습니다. 유일한 문제는 어떻게 든 내 core database에 다시 저장된다는 것입니다.

+0

백그라운드 스레드에서 삭제가 발생합니까? 개체를 삭제할 때 영구 저장소가 업데이트되고 있다고 생각하지 않습니다. 백그라운드 스레드에서이 문제가 발생하면 mergeChangesFromContextDidSaveNotification을 사용하여 변경 내용을 병합하십시오. – sbarow

+0

병합 변경 사항은 무엇을 의미합니까? – Steaphann

답변

0

reskit이 스레드에서 저장/삭제를 처리하는 방법은 모르지만 기본적으로 알림을 등록하는 주 스레드에서 NSManagedObjectContext를 설정할 때 기본적으로 사용됩니다.

-(NSManagedObjectContext *)aContext 
{ 
    if (!_aContext) { 
     _aContext = [(AppDelegate *)[[UIApplication sharedApplication] delegate] managedObjectContext]; 
     [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(mergeChanges:) name:NSManagedObjectContextDidSaveNotification object:nil]; 
    } 
    return _aContext; 
} 

백그라운드 스레드에서 컨텍스트를 변경하면 알림이 전송됩니다.

-(void)mergeChanges:(NSNotification *)aNotification 
{ 
// Merge the changes from the notification 
// on the main thread as this is the main 
// context for our application. 
dispatch_async(dispatch_get_main_queue(), ^{ 

    [self.aContext mergeChangesFromContextDidSaveNotification:aNotification]; 
}); 
} 
+0

그리고 개체를 삭제하는 코드가 여전히 괜찮습니까? – Steaphann

+0

네, 괜찮을 겁니다. 어쩌면 문서를 살펴볼 수도 있습니다. http://restkit.org/api/0.20.0/Classes/RKManagedObjectRequestOperation.html#//api/name/savesToPersistentStore – sbarow

관련 문제