为什么远程删除的实体未从Core Data和数据存储中删除?在开头设置断点 - (void)deleteCachedObjectsMissingFromResult:(RKObjectMappingResult *)结果 在RKManagedObjectLoader中显示变量result不包含任何内容。
我可以通过在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 :(得分: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]);
}