ここによると、MagicalRecord 3.0 になったら削除されるみたいですね。
そこで、他の方法を模索してみることに。
MagicalRecord / CoreData歴が浅いのでよくわからないけどメモしておく。
saveだけ
before
XXXObject.swift
func save() {
let localContext = MR_contextForCurrentThread()
let obj = MR_createInContext(localContext) as XXXObject
obj.hoge = "hoge"
localContext.MR_saveToPersistentStoreAndWait()
}
after
func save() {
MagicalRecord.saveWithBlockAndWait {
(localContext) in
let obj = MR_createInContext(context) as XXXObject
obj.hoge = "hoge"
}
}
こんな感じで書けばいいのかな?
saveしてreturn
このパターンは正直よくわからない。
before
XXXObject.swift
func saveAndReturn() -> XXXObject {
let localContext = MR_contextForCurrentThread()
let obj = MR_createInContext(localContext) as XXXObject
obj.hoge = "hoge"
localContext.MR_saveToPersistentStoreAndWait()
return obj
}
そもそも、これをそのままreturn
していいのかわからないけどこのスレッド内ではデータは使えるはず。
after
XXXObject.swift
// identifierというフィールドを用意して主キー的に使う
override func awakeFromInsert() {
super.awakeFromInsert()
identifier = NSUUID().UUIDString
}
func saveAndReturn() -> XXXObject {
var identifier: String!
MagicalRecord.saveWithBlockAndWait {
(localContext) in
let obj = MR_createInContext(context) as XXXObject
obj.hoge = "hoge"
identifier = obj.identifier
}
return MR_findFirstByAttribute("identifier", withValue: identifier)
}
find
しなおしているのがダサいか…。