読者です 読者をやめる 読者になる 読者になる

プログラミングの魔物

エラー、バグ、仕様変更と戦うブログ

iOSのデータの読み書き

iPhone/iPad/iPod touchプログラミングバイブル5章

ファイルの読み書き

アプリから直接読み書き可能なフォルダ

*******.app
Documents/
tmp/

シミュレータでは

/Users/<Macのユーザ名>/Library/Application Support/iPhone Simulator/<シミュレータのバージョン>/Applications/<シミュレータのID>

プリファレンスの読み書き

Library/Preferencesにはキーと値のセットで設定情報などを保存できる。

HTTP通信

GET、POSTを行える。

メインキューとグローバルキュー

  • iOSのスレッドは1つの「メインキュー」と、複数の「グローバルキュー」
  • メインキューはUIの操作を行えるが、グローバルキューは行えない
  • iOSのコールバックで処理するスレッドは基本的に「メインキュー」
  • しかし、HTTP通信など終了までに時間がかかる処理を行うとUI操作ができなくなる
  • ビジー状態を回避するため「時間がかかり、かつUIの必要ない処理」を「グローバルキュー」で行う
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT,0), ^{
    //グローバルキューで実行する処理。

    //通信完了時などメインキューで実行する処理を指定するには
    dispatch_async(dispatch_get_main_queue(),^{
        //メインキューで実行する処理。
    });
});

通信の流れ

グローバルキューで実行する処理を指定(下記)

  1. URLリクエスト生成
  2. HTTP通信
  3. メインキューで実行する処理を指定(UIの更新)

Bluetooth通信

  • 接続先選択用のピアピッカーを開く
  • デリゲートでコールバックを受け取る
  • データ送信、受信
  • 切断

コラム:バックグラウンドタスクの実行

  • 通常、Homeボタンを押すとアプリは休止状態へ移行する。
  • 休止せずにバックグラウンドでタスクを実行するにはAppDelegateにバックグラウンドタスク用の処理を追加する
  • バックグラウンドタスクは最大10分

バックグラウンドタスクの制限

入る前の制限
  • Bonjourは中止
  • アプリの状態をストレージに保存
  • 必要のないメモリは開放
  • 共有システムリソースの利用は停止
実行中の制限
  • OpenGL ESのコンテキストを作らない
  • ネットワークベースソケットの切断をハンドルする
  • ウィンドウやビューを更新しない
  • CPUパワーの仕様は最小限

メール送信

  • MessageUI.frameworkが必要(Build Phasesから追加)

流れ

  1. 送信可能かチェック
  2. メールコントローラー作成
  3. メールテキスト指定
  4. (添付ファイル指定)
  5. メールコントローラーのビューを開く
  6. 送信後、送信完了コールバックを受け取る

コラム:ローカルノティフィケーション

  • バックグラウンドタスクからノティフィケーションによる通知
  • プッシュ同様、メッセージを音やバッジ付きで表示

参考

iPhone/iPad/iPod touch プログラミングバイブル iOS 6/Xcode 4対応 (smart phone programming bible)

iPhone/iPad/iPod touch プログラミングバイブル iOS 6/Xcode 4対応 (smart phone programming bible)