Eclipse使いのJavaプロラマが、Xcode+SwiftでiPhoneアプリを作ってみるの2週目です。(1週目は、http://d.hatena.ne.jp/grachro/20140713)。アプリ内容はまだ書けません。
Xcode 6 beta3
- エディタの動作が重くなってきた。一文字打つごとに数分固まる。タイミング的に、beta2からbeta3に変えた頃が怪しい気がするがさだかではない。
- http://blog.valeur3.com/?p=1515 ここを参考にキャッシュを捨てたら固まらなくなった
iPod touch (第5世代)
- ios 8 の実機動作確認にはiPod touchを使用。こちらもbeta3に変えて、アプリの起動までの時間が長くなった気がする。
- 前はシミュレータで動作させるより実機の方が起動が早かったが、今やシミュレータのほうがで早い。(?)
- 何かの弾みでiOS8 beta3を入れたiPod toucheが真っ暗なまま何をしても動かなくなった。iTunesからOS再インストールで直った
- なぜかシミュレータで動くコードが、iPod touchだと動かない。
- シミュレータで動く「ObjCBool(false)」が、iPod touchだと「ObjCBool(0)」こう
Core Data
- アップルの公式資料 https://developer.apple.com/jp/devcenter/ios/library/documentation/CoreData.pdf
- JPAの知識が合えば、とりあえず使える。
- テーブル構造はxcdatamodeldファイルでGUIで設定するしかない?
- xcdatamodeldのテーブル構造を変える(マイグレーション)には、決められた手順で操作する必要がある。今後のTry&Errorのネックになりそう。
シリアライズ
- プリミティブなフィールドだと自動的にシリアライズさるるJavaと違い、Xcodeだとフィールドを一つ一つコード上で設定する必要がある。
- NSKeyedArchiver.archiveRootObject(オブジェクト, ファイルパス)とNSKeyedUnarchiver.unarchiveObjectWithFile(ファイルパス) as? クラスで直接ファイルに保存・読み込みできるので、永続化は楽。
- テーブル1レコード毎に1ファイルをシリアライズ保存だと相応の処理時間がかかったので、Dictionaryにまとめて1度に保存すると改善した。
- ちゃんと計測していないが、ファイル操作周りで時間がかかるのだと思う
- Core Dataを使用していた時より、構造の修正が簡単になり、DAOクラスの見通しもよくなった。
- トレードオフとしてwhereやorder byを自分で実装しないといけない。
Dictionaryのシリアライズ
- SwiftでNSDictionaryクラスをシリアライズしようとすると、countが無いとかでエラーとなる。overrideが間違っている?
- NSが付いていないDictionaryクラスを素直に使えば簡単にシリアライズできた。しかもこちらだとタイプセーフ。
- Dicionaryのタイプを指定したサブクラスを作りたかったが、文法的にどうすればいいのかわからなかかった。一旦aliasで逃げたがこれだとサブクラスにメソッドが追加できない。
- "Swiftで辞書型のストアド・プロパティへのアクセスは遅い?"http://qiita.com/takabosoft/items/b2dd95d6c1cbe651fba4 ・・・このサイトと同じ現象に遭遇。
- 解決方法もリンク先にある通り、ローカル変数で処理して最後にプロパティ代入で逃げれた。
サーバとのデータ同期
- サーバtoスマホでのデータ同期で、サーバtoサーバのデータ同期と違う点
- 粒度は小さくする
- 失敗する可能性が高い、途中からでもリカバリできるように
- いつ処理されるかわからない
- 接続される端末数が不定