ひとりまとめ

もろもろのメモ

MagicalRecordで保存したつもりが、アプリ再起動すると消える!?

完全にハマりました。お手上げ気味でした。

起きていた症状はこんな感じ。

・MagicalRecordを使ってるiOSアプリ

・MagicalRecordを使ってデータを保存する

・アプリが起動している間は、読み書き自由

・アプリを再起動すると、保存できていたはずのレコードが消えてる

・他の箇所では、同様の方法でも正常に保持されてる

 

原因を端的に言うと、「この処理だけ別スレッドで実行してた」というものです。データを保存する際、NSManagedObjectContextを指定して保存しますが、それを何も考えず

context = [NSManagedObjectContext defaultContext];

とやってました。defaultContextを指定すればええんでしょ?てなもんです。

これを

context = [NSManagedObjectContext contextForCurrentThread];

としたところ、無事に再起動後も保存完了!

 

もちろん、狙いがあって別のスレッドで明確に分ける場合はそれぞれでNSManagedObjectContextを指定する必要があると思いますが、まとめたいのに分かれちゃった場合は要注意ですね。そもそもこの組み方いいの??っていう問題もありそうですので。

 

あぶないところでした。

 

iOSアプリ テスト自動化入門

iOSアプリ テスト自動化入門