2014年11,12月開発状況
11月
クラウドストレージから読み込み機能作成中
「語学学習支援プレイヤー」をアップデートすべく、開発中。
 作成中の機能 : クラウドストレージ(Dropboxなど)のオーディオファイルを読み込んで使用できるようにする
- クラウドストレージから読み込むさい、フォルダ指定できるようにする。
- クラウドストレージから読み込み中、他の曲を選択して再生することができる。
- 読み込みを途中でキャンセルできる。
ファイル管理画面をどうするか?
 いままでは、
 たとえば、アルバムタブだと、
 アルバム一覧ー>各アルバム詳細
 のように、一覧ー>詳細
 の2層構造。
 (「曲」タブのみ、一層)
 「ミュージック」アプリの形式に合わせていた。
「クラウドストレージから読み込み」でのファイル管理。
 クラウドストレージは、フォルダの中にフォルダをもてる階層構造なので、それを表現できる画面にする必要が有る。
 読み込んだ後の「ローカルでのファイル管理」でも階層構造をもつこととする。
 ローカルでのファイル管理画面では、フォルダの新規作成、ファイル名変更、アイテム移動(ファイル、フォルダの移動)ができるようにしよう。
 まずは、ファイル管理画面で階層構造をもつことができるようにした。
 CustomTableViewControllerのテーブルのセルをタップすると、新たなCustomTableControllerのインスタンスを作成し、navigationControllerにpushするようにした。
Dropboxのファイルを扱うには、Dropbox APIを使う。調べた。
Drop-ins
 簡単にDropboxファイルにアクセスできる仕組み。Dropbox上のファイルを選択する画面があらかじめ用意されている。
 Drop-insにはChooserとSaverがある。
 Chooserで、ファイルをひとつ選択すると、複雑なURLを生成する。
 これをダウンロードするなりなんなりする。
インターネットとの通信がでてきた。いままでやっていなかったこと。
 iOSで、インターネット上のファイルをあつかう機能を調べてみよう。
 iOS 7 から登場したNSURLSessionを使うと、URLを指定してその内容をダウンロードする処理が扱いやすい。
 NSURLSessionを使って、インターネット上のファイルのダウンロードの実験をやってみた。
 NSURLSEssionでは、アプリを閉じてもダウンロード処理できる。複数のタスクをダウンロードできる。
 あつかいやすい。
Drop-insのchooser。これは、クラウドストレージの選択画面があらかじめ用意されていて簡便だ。しかし、複数のファイルを選択する方法、フォルダを選択する方法がみあたらない。
そこで、Dropbox APIのCore APIを使うこととした。
12月
Core APIを使ってDropboxからアイテム読み込み
Core APIを使ったダウンロードだと、アプリ終了後のダウンロードはNSURLSessionのようにはできないようだ。
 アプリ終了後しばらく動作できるbackground task(iOS 7だと3分間)を使うこととする。
Dropboxからアイテムを読み込む際、フォルダが選択できるようにしたい。
 Core APIで、フォルダに相当するURLを指定してもエラーになる。
 なので、フォルダの中を順繰りにめぐってファイルpathを取得するようにした。
また同名のアイテムがあった場合、上書き確認の必要。ー> つくった。
途中経過をテーブルに表示する。ー> 読み込み中は、セルにインジケーターとプログレスバーを表示すようにした。
「クラウドストレージから読み込み」では、「アイテム(ファイルもしくはフォルダ)の選択」をおこなう。
 フォルダセルをタップしたとき、どう動作するか悩む。
 「クラウドストレージから読み込み」では、「アイテム選択」のみ行うので、セルの左2/3ぐらいをタップした場合は、フォルダを選択。セルの右1/3をタップした場合はフォルダの内容を展開することとした。
 どこが境界かわからないと、操作に納得感がなかったので、点線をいれた。
ローカルでのフォルダ・ファイルの扱い。
ローカルでは、ファイルのみ選曲できるようにしていたのでこれを踏襲。
 編集モードは、アイテム選択して、削除、名前変更、移動ができるようにした。また、フォルダの作成ができるようにした。
削除 : アイテムを削除する。このさい、確認メッセージをだすこと。そのさい、「ファイルひとつ」「フォルダひとつ」「複数ファイル」「複数フォルダ」「複数アイテム」で分けた。
 名前変更 : アイテムの名前を変更する。
 移動 : アイテムの移動。新たなnavigationControllerを作成。移動用tableControllerをルートフォルダ分から現在表示しているフォルダ分まで作成し、navigationControllerにpushする。そして、naviagationControllerを現在のviewからモーダルに表示するようにした。
フォルダの作成 : 新たなフォルダを作成する。末尾が’.’のフォルダ名などは作成できないようにして、メッセージを表示するようにした。
ここまで、できた。
