有没有办法一次保存 NSManagedObject 1

Is there a way to save NSManagedObjects 1 at a time

我遇到了这个问题,我有一个包含 NSManagedObjects 的 NSMutableArray。

我想迭代每一个 NSManagedObject,为变量设置一个值,然后保存它们。

问题是我要验证对象是否在数据库中,并且在我将第一个 NSManagedObject 保存到数据库后,该数组中的所有其他 NSManagedObjects 也被插入到数据库中。 ..

这是描述我的问题的一段代码:

for (Category* c in categories) {
    Category* original = [Database getCategoryByID:c.categoryid];
    // After the first save this will have value because it saves all the objects
    // that are in categories Array and the version will be the same...
    
    if (original != nil && original.version >= c.version) {
        // This object is already up to date so do not make any changes
    } else {
        // This object is not up to date, or it does not exist
        // update it's contents
        c.name = name;
        
        [[c managedObjectContext] MR_saveToPersistentStoreAndWait]; 
        // Here it saves all the objects instead of only 1 object
    }
}

有没有办法在 NSMutableArray 中包含其他 NSManagedObjects 时一次只保存 1 个对象?

使用 Core Data,您告诉上下文进行保存,它会保存它拥有的所有内容。无法只保存一个对象,除非该对象是上下文中唯一发生更改的对象。

在您的情况下,您的 Category 对象数组似乎是托管对象,并且它们属于托管对象上下文。避免意外保存的最简单方法是将保存命令移动到循环之后。当你达到那个点时,

  • 任何需要创建或更新的 Category 已准备好保存
  • 任何不需要更新的 Category 都没有变化,因此不会受到保存上下文的影响。

所以保存上下文中的所有内容应该是安全的。有变化就更新,没变化就不变化。