微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

ios – 如何使用Magical Record创建和更新对象并保存它们而不使用contextForCurrentThread

我刚刚读到MagicalRecord的博客文章的作者在 Why contextForCurrentThread Doesn’t work in MagicalRecord.

contextForCurrentThread已被弃用,saveWithBlock应该被替代使用,因为它为相关线程创建了一个安全的新NSManagedobjectContext.

到目前为止,我一直在使用contextForCurrentThread在我的应用程序.但是,我无法确定如何使用saveWithBlock,因为我的获取和保存不一定顺序发生.

目前我在做如下事情:

localContext = NSManagedobjectContext.MR_contextForCurrentThread
person = Person.MR_createInContext(localContext)
person.name = "John Smith"

然后,用户可以浏览应用程序,显示不同的控制器,视图等.可以使用与上述代码类似的方法来创建其他对象.

那么在将来的某个任意点,当用户决定保存时,我运行这个方法

localContext = NSManagedobjectContext.MR_contextForCurrentThread
localContext.MR_savetoPersistentStoreWithCompletion(
  lambda { |success,error|
    # ...
  }
)

建议的方法是什么?更新对象,然后保存它们而不使用contextForCurrentThread?

解决方法

所以,我使用客观C而不是RubyMotion,但你应该能够这样做:
MagicalRecord.saveWithBlock(
   lambda { |localContext|
       person = Person.MR_createInContext(localContext)
       #update person stuff here
   }
)

编辑

如果要稍后保存上下文,您只需要坚持下去:

// Somewhere in your ViewController,etc
NSManagedobjectContext *context = [NSManagedobjectContext MR_confinementContext];


// Somewhere else
Person *p = [Person MR_createInContext:context];

// And in yet another method
[context MR_savetoPersistentStoreAndWait];

这里的主要思想是,您只需要掌握上下文并在准备就绪时执行您的操作.如果要进行后台保存,请使用以下方法

[context MR_savetoPersistentStoreCompletion:^(BOOL success,NSError *error){
   //called on the main thread when save is complete
}];

原文地址:https://www.jb51.cc/iOS/329522.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐