2012-11-14 143 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]); 
}