有没有办法一次保存 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
都没有变化,因此不会受到保存上下文的影响。
所以保存上下文中的所有内容应该是安全的。有变化就更新,没变化就不变化。
我遇到了这个问题,我有一个包含 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
都没有变化,因此不会受到保存上下文的影响。
所以保存上下文中的所有内容应该是安全的。有变化就更新,没变化就不变化。