0

我用以下方法创建了实体

NSManagedObjectContext *localContext = [NSManagedObjectContext MR_contextForCurrentThread];
Contact *contact = [Contact MR_createInContext:localContext];

And

Contact *contact = [Contact MR_createEntity];

在 for 循环中调用上述方法并设置值。之后,我没有为上述实体实例执行任何保存方法。但是,循环完成后,当我从 coredata 读取时,

NSArray *savedContacts = [Contact MR_findAll];
NSLog(@"Saved contacts : %d", [savedContacts count]);

它打印保存的实体计数。那么,这些实体是否自动保存?或者是否有任何设置导致 MagicalRecord 保存每个实体?

任何类型的信息都是非常重要的。我正在使用 MagicalRecord 2.2 版。该问题已在此处打开,指向使用 MagicalRecord 标记对 SO 提出问题。

4

1 回答 1

1

我找到了这种行为的原因。

来自 MAGICAL RECORD 的 README 文档:更改为保存

MR_save已暂时恢复到在当前线程上同步运行并保存到持久存储的原始状态。但是,该MR_save方法被标记为已弃用,并将在 MagicalRecord 的下一个主要版本(版本 3.0)中删除MR_saveToPersistentStoreAndWait如果您希望在库的未来版本中具有相同的行为,则应该使用 。

因此,如果您从MR_contextForCurrentThread创建上下文,则上述规则将适用,这会导致您创建的每个对象都保存在持久存储中,即使您不调用 save 方法也是如此。同样,MR_createEntity方法使用来自MR_contextForCurrentThread的上下文,它导致对象保存它。如上所述,不推荐使用 MR_save 并将在 MR 版本 3.0 中将其删除,即使您通过MR_contextForCurrentThread创建上下文也将阻止它在将来自动保存。

要创建具有自动保存功能的对象,您只能使用MR_context中的本地上下文,如下所示:

NSManagedObjectContext *localContext = [NSManagedObjectContext MR_context];
Contact *contact = [Contact MR_createInContext:localContext];
于 2014-01-28T07:01:18.627 回答