我刚刚在 Why contextForCurrentThread Doesn't work in MagicalRecord 上阅读了 MagicalRecord 博客文章的作者.
contextForCurrentThread
已弃用,应改用 saveWithBlock
,因为它会为相关线程创建安全的新 NSManagedObjectContext
。
到目前为止,我一直在我的应用程序中大量使用 contextForCurrentThread
。但是,我无法弄清楚如何使用 saveWithBlock
来代替,因为我的提取和保存不一定按顺序发生。
目前我正在做这样的事情:
localContext = NSManagedObjectContext.MR_contextForCurrentThread
person = Person.MR_createInContext(localContext)
person.name = "John Smith"
然后用户可以浏览应用程序,显示不同的 Controller 、 View 等。可以使用与上述代码类似的方法创建其他对象。
然后在未来的某个任意点,当用户决定保存时,我运行这个方法:
localContext = NSManagedObjectContext.MR_contextForCurrentThread
localContext.MR_saveToPersistentStoreWithCompletion(
lambda { |success, error|
# ...
}
)
在不使用 contextForCurrentThread
的情况下创建和更新对象然后保存它们的推荐方法是什么?
最佳答案
这是一个新的 api 教程:http://ablfx.com/blog/article/2 这是引用文献:http://cocoadocs.org/docsets/MagicalRecord/2.1/
初始化
[MagicalRecord setupCoreDataStackWithStoreNamed:@"MyDatabase.sqlite"];
释放
[MagicalRecord 清理];
插入
Person *alex = [Person MR_createEntity]; alex.name = @"亚历克斯"; alex.age = @23;
选择
/检索 NSManagedObject 子类的所有内容
NSArray *people = [Person MR_findAll];
//获取第一条记录
Person *aPerson = [Person MR_findFirst];
//条件检索记录&排序
NSArray *people = [Person MR_findByAttribute:@"name"withValue:@"alex"andOrderBy:@"age"ascending:YES];
更新
//更新检索到的实体就像操作它的属性一样简单
aPerson.age = @56;
删除
//移除所有记录
[Person MR_truncateAll];
//删除单条记录,取回后
[alex MR_deleteEntity];
保存
//对于任何要在磁盘上实际保存/更新/删除的实体调用以下方法
[[NSManagedObjectContext MR_defaultContext] MR_saveToPersistentStoreAndWait];
//再次检查 MagicalRecord 存储库以获得更多保存选项
关于ios - 如何在不使用 contextForCurrentThread 的情况下使用 Magical Record 创建和更新对象并保存它们,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19251246/