【问题标题】:CoreData the save method is not workingCoreData 的保存方法不起作用
【发布时间】:2010-07-28 06:50:30
【问题描述】:

我正在使用 coredata 为我的 iPhone 创建一个应用程序。

我有一个带有对象的视图控制器,我想将该对象保存到我的收藏夹视图控制器中。 通过单击收藏夹按钮,我希望将我的对象保存到 managedObjectContext 中,但出现以下错误:

由于未捕获的异常“NSInternalInconsistencyException”而终止应用程序,原因:“尝试执行另一个操作,但已在进行提取”。 *

我的代码:

// Step 1: Create Object
Favorite * newFavorite = (Favorite*)[NSEntityDescription insertNewObjectForEntityForName:@"Favorite" inManagedObjectContext:managedObjectContext];

// Step 2: Set Properties       
    newFavorite.name = @"Company";

    NSLog(@"%@",newFavorite);

// Step 3: Save Object

    NSError *error = nil;
    if (![newFavorite.managedObjectContext save:&error]) { // this is where the program crash
        NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
        abort();
    }

我不确定我做错了什么。

【问题讨论】:

  • 您是否在应用程序中使用了多个线程?
  • 不,我没有使用多个线程。

标签: iphone core-data nsmanagedobjectcontext


【解决方案1】:

我猜你有一个 UI 元素,例如一个表格,它会在 UI 更改时激活提取。例如,如果您有一个 fetched results 控制器,表格的任何滚动都可以激活 fetched results 控制器的 fetch。

您不能在对集合进行迭代时对集合进行变异,因为在迭代过程中迭代计数会发生变化。一个 fetch 遍历与其实体和谓词匹配的对象集合。如果在 fetch 工作时插入对象,则会出现错误。

通常您会在多个线程中看到此问题,但我认为 UI 可能会在适当的情况下触发该问题。

【讨论】:

  • 是的,我确实有获取数据的 tableview。我想将该数据保存或复制到另一个 manageObjectContext。在不获取数据的情况下如何做到这一点?
  • 您必须做一些不寻常的事情才能在获取的同时触发表更新。触发插入新对象的 UI 元素本身是否嵌入在 tableview 中?如果您有两个或更多上下文,则它们各自的更改可能会相互冲突。我不能说不了解您的应用的更多信息。
【解决方案2】:

您可能更改了表格中的某些内容。如果是这样,请尝试使用表 Z_METADATA (Z_VERSION, Z_UUID, Z_PLIST), Z_PRIMARYKEY (Z_ENT) 的原始值...

【讨论】:

    猜你喜欢
    • 2015-01-02
    • 1970-01-01
    • 2018-09-15
    • 1970-01-01
    • 2014-05-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多