MagicalRecordで保存したつもりが、アプリ再起動すると消える!?
完全にハマりました。お手上げ気味でした。
起きていた症状はこんな感じ。
・MagicalRecordを使ってるiOSアプリ
・MagicalRecordを使ってデータを保存する
・アプリが起動している間は、読み書き自由
・アプリを再起動すると、保存できていたはずのレコードが消えてる
・他の箇所では、同様の方法でも正常に保持されてる
原因を端的に言うと、「この処理だけ別スレッドで実行してた」というものです。データを保存する際、NSManagedObjectContextを指定して保存しますが、それを何も考えず
context = [NSManagedObjectContext defaultContext];
とやってました。defaultContextを指定すればええんでしょ?てなもんです。
これを
context = [NSManagedObjectContext contextForCurrentThread];
としたところ、無事に再起動後も保存完了!
もちろん、狙いがあって別のスレッドで明確に分ける場合はそれぞれでNSManagedObjectContextを指定する必要があると思いますが、まとめたいのに分かれちゃった場合は要注意ですね。そもそもこの組み方いいの??っていう問題もありそうですので。
あぶないところでした。