Obj.C

obj.C:rename機能の検討

フォルダ名とファイル名を変更する機能の検討をしました。

フォルダ名を変更するのは面倒

フォルダ名とファイル名はそれぞれのfile path(directory path)が作られるときに決定/設定される仕様になっています。あとから変更するとなると、ファイルのときは表の書き換えと作成済みファイルのrenameが必要になります。フォルダの場合、その中のファイルのfile pathを全部変更する必要があります。

そんなことを考えながら、NSPopUpButtonCellにrenameを追加したり、Text Field CellとIBActionを接続したりして、イベントをどう拾えばいいか、調べていました。renameするために表のカラムの変更からイベントを拾う方法がわかりません。

なぜ?

あっ、カラムの修正ができない

その一方で、そもそも表に表示はできるものの、ユーザの入力した文字列を受け取ることができません。あれっ?確かに変です。表示はできても、修正ができない仕様というものは存在しません。

原因は、-(void)tableView:(NSTableCellView *)tableView setObjectValue:(id)object forTableColumn:(NSTableColumn *)column row:(NSInteger)rowまでは書いてあったのですが、ユーザ入力を想定していなかったので、中身を何も書いていなかったことにあります。それで、ここにユーザ入力を反映させたらどうなるのでしょう?

セルの構成は次のようになっています。

  • ffName: 名称(ファイル名またはフォルダ名)
  • ffFile: ファイル名
  • ffFolder:フォルダ名
  • ffFilePath:ファイルパス(ディレクトリパス)
  • ffFolderPath:フォルダパス

棚ぼた

よくよく考えてみたら、ffNameは表示用に設定したことを思い出しました。完全にその元々の考えを実現できれば、あとからユーザが名称(ffName)を自由に変更してもファイルパスには影響しませんからファイル名の変更(rename)は不要になります。

これは何となくラッキーでした。

ということは、あとから名称(ffName)でソートする機能を付け加えればいいのでしょうか?そのためには、フォルダをひとかたまりにするためにffFolderPath+名称にしないといけないのですが、これだとフォルダに入っていないファイルが後に来てしまい、並びがおかしくなるので、①フォルダはffFolder+ffName、②ファイルはffNameのみという組み合わせで新規にもう1列追加が必要ですね。単純作業ですが、手間がかかります。しかし、むずかしくないのでやるだけです。

IMG_3275多分、芝桜?

IMG_3285丸田池公園の桜が散りはじめると春は終わりに近づきます。

Categories: Obj.C, 技術

Tagged as: