Я только что прочитал запись автора MagicalRecord в блоге о Почему contextForCurrentThread не работать в 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
?
person = Person.MR_createInContext(localContext)
иlocalContext.MR_saveToPersistentStoreWithCompletion
выполняются в одном потоке? - person Arek Holko   schedule 08.10.2013NSManagedObjectContext.MR_contextForCurrentThread.MR_saveToPersistentStoreAndWait
. - person Paul Sturgess   schedule 08.10.2013Person
, будет таким же, как и контекст, в котором вы выполняетеMR_saveToPersistentStoreWithCompletion
? - person Arek Holko   schedule 08.10.2013