2012-11-14 142 views
1

爲什麼遠程刪除實體不會從核心數據和數據存儲中移除刪除?在 開頭設置一個斷點 - (空)deleteCachedObjectsMissingFromResult:(RKObjectMappingResult *)在RKManagedObjectLoader結果 顯示出來的變量結果不包含任何東西。RestKit /核心數據:遠程刪除實體獲得不從核心數據

我可以通過在RestKit委託中實現這個特性來解決這個問題 - (void)objectLoader:(RKObjectLoader *)objectLoader didLoadObjects:(NSArray *)對象,但是在我看來這是一種不潔的代碼。 RestKit/Core Data應該自己做這件事?!不管怎樣,下面的實現可以解決這個問題:

- (void)objectLoader:(RKObjectLoader *)objectLoader didLoadObjects:(NSArray *)objects 
{ 

NSArray *allReservations = [Reservation findAll]; 

for(Reservation *reservationRecord in allReservations) { 
    if(![objects containsObject:reservationRecord]) { 
     [[[[RKObjectManager sharedManager] objectStore] managedObjectContextForCurrentThread] deleteObject:reservationRecord]; 
    } 
} 
} 

任何想法來解決這個問題,而不didLoadObjects的幫助?添加/更新現有實體正常工作。

+0

我被困在完全相同的點。很高興你在這裏有一個解決方案,但我想知道爲什麼方法-deleteCachedObjectsMissingFromResult不會刪除現在不存在的服務器對象。我發現方法-fetchRequestForResourcePath不會返回適當的fetchRequest,但我還沒有做足夠的研究來查看RKObjectMappingProvider如何爲資源路徑存儲/創建fetchRequests。 –

回答

0

RestKit只會刪除NSManagedObjectContext中的條目。你的方法只編輯NSManagedObjectContext中的對象,但從來沒有將它們保存到對象存儲。確保添加/編輯/刪除已完成後,將更改保存到ObjectStore的。

- (void)objectLoader:(RKObjectLoader *)objectLoader didLoadObjects:(NSArray *)objects 
{ 
    NSArray *allReservations = [Reservation findAll]; 

    // Deleting each item in NSManagedObjectContext 
    for(Reservation *reservationRecord in allReservations) { 
     if(![objects containsObject:reservationRecord]) { 
      [[[RKObjectManager sharedManager] objectStore] managedObjectContextForCurrentThread] deleteObject:reservationRecord]; 
     } 
    } 

    // Changes only exist in NSManagedObjectContext, delete them in the ObjectStore 
    NSError *error = nil; 
    if (![[[RKObjectManager sharedManager] objectStore] managedObjectContextForCurrentThread] save:&error]) 
     NSLog(@"Unresolved error %@, %@", error, [error userInfo]); 
}