MagicalRecord自动保存实体,即使不调用Save也可以创建

时间:2014-01-28 05:57:04

标签: entity-framework core-data magicalrecord-2.2

我用以下方法创建了实体

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版。该问题已经打开here,指向使用MagicalRecord标记在SO上提问。

1 个答案:

答案 0 :(得分:1)

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

从魔法记录的自述文件:保存的变化

  

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];