だからここに私が持っているものがあります:
- NSMutableArray データ ソースを持つ NSTableView
- テーブル ビューのデータを含むファイルを含むフォルダーを監視する FSEvents ( Objective-C 抽象化の良さのためにSCEventsを使用)
- FSEvents は、UI のリロード ボタンと同じ機能をトリガーします。この関数は、上記のファイルの内容に基づいて、新しいデータ ソースでテーブル ビューを更新します
setDataSource:。
そして、何が起こるかは次のとおりです。
- ファイルに変更を加えると、FSEvent がトリガーされ、refresh メソッドが呼び出されます。
- テーブル ビューが受け入れる配列には、FSEvent をトリガーした変更が実際に含まれています。
setDataSource:正しいデータソースで NSTableView に送信されます。- 変更はテーブル ビューに表示されません。
しかしその後:
- 更新ボタンをクリックすると、FSEvent とまったく同じメソッドがトリガーされ、テーブル ビューが新しいデータで更新されます。
FSEvent を NSNotification( NSApplicationDidBecomeActiveNotification) に置き換えてみましたが、同じことが起こります。
なぜこれが起こっているのか誰にも分かりますか?
編集:明確にするために、私の質問の主旨は次のとおりです:ボタンを押すとトリガーされたときに NSTableView がリロードされるのはなぜですか?
編集: diciuのおかげで、実際には、イベントによってトリガーされたときにすべての UI 参照が 0x0 を指しているが、ボタンのクリックによってトリガーされたときに有効なアドレスを持っていることがわかりました。これらのオブジェクトはすべて IB で宣言されているため、私のコードではインスタンス化や割り当ては行われません。だから私の質問は今です:これらのポインターがnilを指すのを止めるにはどうすればよいですか?