2014年11,12月開発状況

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からモーダルに表示するようにした。

フォルダの作成 : 新たなフォルダを作成する。末尾が’.’のフォルダ名などは作成できないようにして、メッセージを表示するようにした。

ここまで、できた。

コメントする

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください