うるおいらんど

アプリ開発やサイト制作のメモとか。

【Swift】UIDocumentでデータを保存した・読み込み後に処理をする

魚ライン
魚ライン

UIDocumentを用いてデータを保存しているのですが、保存後に処理をしたり、読み込み後に処理をする場合に上手くいかないということが多々あったのでメモ。

 

UIDocumentを用いるデータの保存の仕方についても記事を書いていますのでそちらもどうぞ。

【Swift】NSData/NSFileWrapperを利用してデータを保存する

 

まずはデータを読み込む時ですが

 

こんな感じ。UIDocumentクラスを用いて作成したUSDocumentってやつの中身は上記記事に書いてありますのでここでは割愛。

 

問題はここ

 

ファイルを開くのに成功した時に、ここで色々と処理をさせたいのですが、このopenWithCompletionHandlerというやつは非同期処理で行います。

つまり、mainスレッドでは別の処理を行っています。

 

readDataに読み出しの内容が書かれていますが、

 

このように呼び出した場合に、「ファイルを開きました」→「hoge」という順ではなく

「hoge」→「ファイルを開きました」の順になるでしょう。

 

こうなると厄介ですよね。

ならばopenWithCompletionHandlerに直接処理を書いちゃえばいいじゃない。というわけなんですが

この中でUIを変えようとすると

This application is modifying the autolayout engine from a background thread, which can lead to engine corruption and weird crashes
なんてエラーが出まくります。

メインスレッド以外でレイアウト変えるなよ〜今は大丈夫だけど今後クラッシュするよ〜みたいな感じ(?)

 

なのでこの中の処理が終わった後にメインスレッドで処理を行えばOKなはず・・・

ってなわけで

 

dispatch_asyncでメインスレッドに戻してやると上手くいきました。

 

saveToURLも同様に

 

これで非同期処理が終わった後に上手く処理できると思います。。

 

アプリ進捗

メモリ管理もそこそこに、あとはチュートリアル作成とアイコン作成のみといった感じなんですが、うーむアプリ名すら未だ決定していないという状況。細かいエラーが湧いて出てくる恐怖もありデバッグデバッグ。いや1ヶ月で作る予定がもう早2ヶ月経ってしまっている。びっくり。

メモリ管理がめちゃくちゃ大変。

そしてビックリしたのが、iPhone4Sで実機テストを行っているのですが、なんとメモリ0.5GB!5から1GBで今じゃ2GBだっていうのに!

ま、まぁ4Sで落ちないアプリならばきっと大丈夫と言い聞かせて・・・

とにかくちゃっちゃと終わらせてまずはリリースしてみてから考えないとダメな感じですね。細かいエラーも見つけられた範囲では片付けられているはずなので。。。

 

2日ほど腹痛で死んでましたが、大分元気になったので今週中に申請します・・・・。がんばります。。。。

 

 

魚ライン
モッピー!お金がたまるポイントサイト
魚ライン

Swiftの記事一覧を見る

コメント

コメントは認証制です。詳しくは下記の注意をお読みください。

コメントを残す

コメント時の注意

「Twitter」「Facebook」「Google+」「WordPress」のいずれかのアカウントをお持ちの方は各アカウントと連携することでコメントできます。 コメントしたことはSNSに流れませんので、アカウントをお持ちの方はこちらの方法でコメントを投稿して下さると嬉しいです。 アカウントをお持ちでない方はメールアドレスで投稿することができます。 初回コメント時は承認後に表示されます。

魚ライン 魚ライン