我正在使用 NSFetchedResultsController 和 NSFetchedResultsControllerDelegate 来驱动 UITableViewController/UITableView。单击按钮会触发通过 [managedObjectContext deleteObject:aManagedObject]
删除 NSManagedObject。
NSFetchedResultsControllerDelegate 方法正确触发,该行从 UITableView 中删除。
这就是事情变得奇怪的地方。当我调用 [managedObjectContext save:&error]
时,NSFetchedResultsControllerDelegate 方法 controller:didChangeObject:atIndexPath:forChangeType:newIndexPath:
以删除的 NSManagedObject 作为对象调用(并且 isDeleted 是 YES在托管对象上)并且更改类型是 NSFetchedResultsChangeInsert,它将删除的 NSManagedObject 添加回 UITableView。
我试图通过检查委托(delegate)方法中的 isDeleted
标志来禁止插入,但这会导致 beginUpdates
和 endUpdates
断言失败。
我做错了什么或出了问题吗?我是否错过了某处步骤?
最佳答案
面对与您完全相同的问题,我可以意识到只有另一个对象或上下文对已删除对象的单个引用才能使它作为故障保持事件状态,直到引用被删除。如果应用程序再次尝试访问已删除的对象,它将崩溃。单个引用可能是已删除对象重新出现的原因。
在我的案例中,在调用异步删除操作之前释放对将要删除的对象的 UIViewController 实例引用解决了这个问题。
// Delete a NSManagedObject.
NSManagedObjectID *objectID = [[managedObject objectID] copy];
// Release all references to the object.
self.managedObject = Nil;
// Asynchronously delete the object.
[self asynchronouslyDeleteManagedObjectWithManagedObjectID:objectID];
忽略 Release all references to the object
部分会使对象在被删除到 NSFetchedResultsController
观察者实例后重新出现为 isDeleted
。
关于objective-c - 已删除 NSManagedObject 从 TableView 中正确删除,然后在保存时重新出现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11910217/