Obj.C

obj.C:NSIndexPathの紐づけ不良の解消方法

NSIndexPathを使ったTreeのfile pathとの紐づけがうまくないことが判明しました。

ここ2日ばかり解決方法を考えていたのですが、これだったらうまく行くかもしれないという方法をやっと考えつきました。

概要は次の通りです。もう少し試してみてOKだったらこのあとに詳細を記載します。

  • Treeのフォルダを開けたり閉じたりするとき、file pathの総数に対してまだfile pathが追加されていないなら初めて開けたときに追加されます。
  • すべてのフォルダが少なくとも1回は開けられたとき、それ以降、file pathの総数は変化しません。
  • 削除・追加が発生したとき、rearrangeObjectで削除・追加をフォローしなければなりません。
  • 他方、フォルダを開閉したとき、Treeとして表示されている項目は変化し、したがって、内部的に管理しているfile pathの配列も変化しなければなりません。
  • この変化をNSIndexPathで管理できるようにします。Treeに表示されている項目を上から1行ずつselectRowIndexesで選択し直して、NSIndexPathを作成します。
  • このとき、本来なら、NSIndexPathからTreeを直接参照できればいいのですが、その方法がわからないので、ここではworkaroundを選択することにしました。
  • 現在、Treeの深さはlengthが3までの仕様になっています。
  • length 1、2が基本フォルダMesaClipのすぐ下にあるファイルやフォルダになります。これらはNSIndexPathから計算してfile path配列の位置を求めます。
  • length 3は、フォルダのときです。これはfile path配列の中にランダムにある可能性があります。
  • それで、length 3を検出したとき、直前のフォルダの中に入っているファイルのfile path配列の位置をsaveすれば、リンク(関連づけ)はOKになります。
  • 最初のパートでNSIndexPathのlengthから1、2、3、その他の個数を求めていますが、wint1とwint2だけを使っています。懸念点として、wint1とwin2が混在したとき、これでいいかどうか、不安が残ります。

スクリーンショット 2014-06-23 20.31.58 スクリーンショット 2014-06-23 20.32.24 スクリーンショット 2014-06-23 20.32.47

Categories: Obj.C, 技術