1

私のセットアップ:

  • NSDictionaryオブジェクトのNSMutableArrayにデータを入力するsqliteデータベースがあります。これは、NSTableViewのデータソースです。
  • 列の1つは「時間」を保持し、時間は秒を保持するフロートです。
  • この列の値を分:秒で表示したいと思います。たとえば、私のデータは123.4329387になります。2:03を表示したいのですが、列のNSTextFieldに適用されたNSFormatter(またはNSNumberFormatter)のサブクラスで問題はありません。
  • IBのテーブル列属性を使用して並べ替えを設定しました。並べ替えキーを「time」に設定し、セレクターを「compare:」に設定しました。これは、フォーマッターがなくても正常に機能します。

現在、これは私がソート(降順)するときに私にこのようなものを与えます

1:37、1:31、0:10、0:10、0:09、1:30、1:30、1:26、0:09

同様のナンセンスで、何かが起こっているように見えますが、それは間違いなくソートされていません。

フォーマットされた値ではなく、基になるデータを参照するように並べ替えるにはどうすればよいですか?または、カスタムの並べ替えメソッドを指定するにはどうすればよいですか?また、そのメソッドのコードはどこに配置すればよいですか?私はかなり周りを検索しましたが、この問題を解決するのに役立つものは何も見つかりませんでした。これに関する助けをいただければ幸いです。

4

1 に答える 1

1

ソート時にNSStringクラスのcompare:を使用していましたが、基になる数値データを使用していたことがわかりました。ここですべてが内部で何が起こっているのか正確にはわかりませんが、「timeCompare」と呼ばれるNSStringのカテゴリで独自のcompareメソッドを作成することで、これを修正することができました。次に、Interface Builderで、テーブル列のセレクターフィールドに「timeCompare:」を入力します。これにより、NSNumbersに指定された文字列を変換したカスタム比較メソッドを呼び出し、それらに対してcompare:を呼び出すことができます。

于 2010-04-28T21:55:32.160 に答える