1

为什么远程删除的实体没有从 Core Data 和数据存储中删除?在 - (void)deleteCachedObjectsMissingFromResult:(RKObjectMappingResult *)result in RKManagedObjectLoader 的开头设置断点表明变量结果不包含任何内容。

我可以通过在 RestKit 委托中实现这个功能来解决这个问题 - (void)objectLoader:(RKObjectLoader *)objectLoader didLoadObjects:(NSArray *)objects 但在我看来这是一种不干净的代码。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 帮助的情况下解决该问题的任何想法?添加/更新现有实体可以正常工作。

4

1 回答 1

0

RestKit 只会删除 NSManagedObjectContext 中的条目。您的方法仅编辑 NSManagedObjectContext 中的对象,但从不将它们保存到 objectStore。确保在添加/编辑/删除完成后将更改保存到 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]);
}
于 2012-11-25T12:50:55.507 回答