Obj.C

obj.C:TreeController版ソースコード

なんとか6月末という納期目標が達成できそうです。Table View版からTreeに拡張したことでたいへん勉強になりました。

まず、配列のリンク関係を整理します。PowerPointファイルは3ページ目です。

スクリーンショット 2014-06-18 14.45.13これらの配列の特徴は次の通りです。配列の設計上の特徴ではなく、Objective-Cのメソッドで注意するべき特徴の意味です。Excelファイルの配列、配列2の中に説明があります。

スクリーンショット 2014-06-18 15.04.46特につまづいたのは次の点です。

  • Tree Controllerで展開されるfile pathの配列と画面上のTreeの構成は厳密にはイコールでありません。フォルダが閉じられているとき、そのフォルダを1個にして中のファイルを無視するようにしないといけません。
    このため、Treeの何行目がどのfile pathに対応するか行位置から直接引けるように配列trIndex4pathを作成しました。
  • 他方、Table Viewは必ずしもTreeと同じ並びになりません。したがって、Treeのfile pathからTable Viewに格納されている同じfile pathを探し出し、その行位置を格納した配列trIndexwkArrayを作成しました。
  • また、Table Viewとの互換性を保つためにその行位置がTreeのどの行になるか検索するメソッドを追加しました。

この中で、特に最後までわからなかったのは、上図の右端の下2行のようなケースが発生することでした。

もうひとつわかりにくかったことは、selectRowです。
selectRowIndexesの注意事項

  • 当然と言えば当然、最後に選んだ行がclickedRowで値が上がってきます。表内をクリックした後に、違う箇所でファンクション(IBAction)をクリックすると表外になってしまいます。
  • これは、たとえば先にTreeをクリックし、あとでTable Viewをクリックしなおしたときにも同じことが起きます。
  • 解決方法は、クリックされた行位置を覚えておいて、削除なり、ファイル名の変更なりをすることになります。

reloadDataについて

  • まだ最終確認できていませんが、表の行追加・削除をしたときには必ずreloadDataを実行するようにした方がいいです。
  • 基本的には、追加・削除は1ヶ所で実行しているはずなのですが、そうでないケースがあったようで、reloadDataを削除したら画面が表示されない現象が発生しました。
  • 現時点では、reloadDataが機能の中に入っているので、階層の深い所から外側の浅い所に持って来るつもりです。

 

最新のソースコードはここにあります。

  • 最近気がついたのですが、build errorが出る場合、Identity and TypeのNameを変更すればいいです。理由は調べる必要があります。時間がなくて調べていません。
  • 現在のバージョンは、0.58です。
  • logが出ます。
  • このあと、デバッグしながら、コードの整理をします。
  • このあとのバグ修正は課題リストで管理します。