我用以下方法创建了实体
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上提问。
答案 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];