从 iphone 的核心数据中删除对象时应用程序崩溃
Posted
技术标签:
【中文标题】从 iphone 的核心数据中删除对象时应用程序崩溃【英文标题】:app crashes when deleting an object from core data in iphone 【发布时间】:2012-05-18 07:22:35 【问题描述】:我已经用服务器中的一些数据填充了一个表视图并将其保存到核心数据中。现在,当用户单击表视图中的删除选项时,我必须从核心数据中删除对象。 我试过的是这样的:`
-(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 无法删除其他上下文中的对象”。'任何人都可以解决这个问题吗?提前谢谢
【问题讨论】:
你在哪一行崩溃? @Narayana 在这一行 [[Server serverInfo].context deleteObject:[self.couponList objectAtIndex:indexPath.row]]; @alpz 再次,无法访问您的帐户? 【参考方案1】:您必须创建一些管理对象上下文、获取请求,然后使用某些谓词删除对象。
【讨论】:
我这样添加 smthng 吗? NSManagedObjectContext *context=[服务器服务器信息].context; NSFetchRequest * singleCoupon = [[NSFetchRequest alloc] init];【参考方案2】:显然您正在使用多个托管对象上下文。这由您的错误消息指示。确保您只使用一个托管对象上下文,即没有使用不同的后台任务。
您将表格视图的数据保存在单独的数组中。这可能是另一个问题。处理核心数据和表视图的正确方法是使用NSFetchedResultsController
。
【讨论】:
【参考方案3】:同意蒙迪。
最重要的是,如果您需要许多 managedObjectContext 实例,请不要创建那么多,而是使用 NSManagedObjectContext 的锁定和解锁功能来启用多线程,而不会出现对象故障和无效问题。
编辑
也许您可以尝试在 AppDelegate 中仅创建一个 NSManagedObjectContext 并从您需要使用它们的控制器调用相同的 managedObjectContext。这与 lock 和 unlock 方法一起解决了我的多线程和对象失效问题。
希望这会有所帮助。
【讨论】:
以上是关于从 iphone 的核心数据中删除对象时应用程序崩溃的主要内容,如果未能解决你的问题,请参考以下文章