【发布时间】:2012-03-16 07:05:07
【问题描述】:
喜欢标题。我使用核心数据插入项目,我插入 100 个项目,它太慢了。如何提高插入速度? Core Data 哪个有事务功能?
【问题讨论】:
-
你能告诉我们你是如何创建你的项目的吗?
标签: objective-c ios xcode core-data
喜欢标题。我使用核心数据插入项目,我插入 100 个项目,它太慢了。如何提高插入速度? Core Data 哪个有事务功能?
【问题讨论】:
标签: objective-c ios xcode core-data
[[<#NSManagedObjectContext#> undoManager] beginUndoGrouping];
... do some data modifications ....
[[<#NSManagedObjectContext#> undoManager] endUndoGrouping];
[[<#NSManagedObjectContext#> undoManager] undo]; // rollback
...
【讨论】:
您正在寻找的是在插入所有 100 个对象之后而不是在每次插入之后在 Core Data 中 save。
当对象被插入到 Core Data 中时,它们只存在于内存中。要将新对象持久保存到磁盘,您应该保存它将进行所有更改(插入、更新和删除)并将它们一起写入磁盘。
如果您查看the documentation for -insertObject(如下),您会了解到插入对象只会在保存更改时注册要插入的对象。
插入对象:
注册一个对象,以便在下次保存更改时插入到接收者的持久存储中。
- (void)insertObject:(NSManagedObject *)object参数
对象
一个托管对象。
通过进一步查看the documentation for -save:(如下),您会发现它将(尝试)保存所有未保存的更改,在您的情况下是所有 100 个插入的项目。
保存:
尝试将对已注册对象的未保存更改提交到其持久存储区。
- (BOOL)save:(NSError **)error参数
错误
指向
NSError对象的指针。您不需要创建NSError对象。如果您通过NULL,则保存操作在第一次失败后中止。返回值
如果保存成功则
YES,否则NO。
【讨论】: