我已经使用服务器中的一些数据填充了一个表视图,并将其保存到核心数据中。现在,当用户单击表视图中的删除选项时,我必须从核心数据中删除该对象。 我试过的是:`
-(void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath
{
NSError *error;
[[Server serverInfo].context deleteObject:[self.couponList objectAtIndex:indexPath.row]];
if(![ [Server serverInfo].context save:&error]) {
// Handle error
NSLog(@"Unresolved error series %@, %@", error, [error userInfo]);
}
[self.couponList removeObjectAtIndex:indexPath.row];
[tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath]
withRowAnimation:UITableViewRowAnimationFade];
if ([self.couponList count]==0) {
[self.table setEditing:NO animated:YES];
[self.editBt setStyle:UIBarButtonItemStyleBordered];
}
}
` 但是它给出了一个例外和崩溃。这是我在日志中:“由于未捕获的异常'终止应用程序'NSInvalidArgumentException',原因:'NSManagedObjectContext无法删除其他上下文中的对象'。'有人能解决这个问题吗?提前谢谢
答案 0 :(得分:1)
你必须制作一些manageobject上下文,一个获取请求,然后使用一些谓词删除对象。
答案 1 :(得分:1)
显然,您使用的是多个托管对象上下文。这由您的错误消息指示。确保您只使用一个托管对象上下文,即没有使用不同后台任务的后台任务。
您将表视图的数据保存在单独的数组中。这可能是另一个问题。处理核心数据和表格视图的正确方法是使用NSFetchedResultsController
。
答案 2 :(得分:0)
同意Mundi。
最重要的是,如果需要许多managedObjectContext实例,请不要创建那么多,而是使用NSManagedObjectContext的锁定和解锁函数来启用多线程,而不会出现故障和对象失效的问题。
修改强> 的
也许您可以尝试在AppDelegate中只创建一个NSManagedObjectContext,并从需要使用它们的控制器中调用相同的managedObjectContext。这与锁定和解锁方法一起解决了我对多线程和对象失效的问题。
希望这有帮助。