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

前端之家收集整理的这篇文章主要介绍了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
}];

猜你在找的iOS相关文章