1

TextMateで、ローカルhtmlファイル(Mountain LionでのWeb共有、URLなどを使用http://macmini.local/~mike/page.html)の行を変更し、TextMate内で右に押すCmdrと、Chrome、Firefox、SafariのWebページがすべて変更されるのは非常に驚くべきことです。コンテンツを自動的に更新します。どのようにそれを行うことができるのだろうか、そしてそれはアプリがそのファイルを監視しているかどうか(または監視しないことを選択できるかどうか)に依存しますか?iOSにはMacOSXのバインディングと同様に機能できるKVOがあると聞きましたが、上記の動作がOS Xバインディングによって行われるかどうかわかりませんか?)。

4

1 に答える 1

2

KVOとBindingsは、ファイルではなくオブジェクトで機能します。

ファイルが変更されたことを他のアプリに通知する方法はいくつかあります。

  • FNNotify古いファイルマネージャから廃止された関数です。かかりますFSRef。もありFNNotifyByPathます; あなたはそれが何をするかを推測することができます。
  • -[NSWorkspace noteFileSystemChanged:]パスを取り、同様にファイルを監視している可能性のあるものすべてに通知します。
  • ファイル調整は別のシステムです。それは上記のより原始的な方法と統合するかもしれませんが、私は確信が持てず、それを当てにしないでしょう。ファイルコーディネーターが通知を処理します。ファイルプレゼンター(ドキュメントベースのアプリのドキュメントを含む)が監視を処理します。

一部のkeventアプリは、、、 FSEvents 、dispatch_sourceまたはその他の手段を使用してファイルを監視するための古い手書きのコードを使用しているため、上記のいずれも実行しなくても変更に気付くでしょうが、ほとんどのアプリはそのような追加の対策を講じていません。

アプリがドキュメントベースの場合、何もする必要はありません。ドキュメント機構がすべてを処理します。通常どおり、読み取りメソッドと書き込みメソッドを実装するだけです。

ドキュメントベースではないアプリの場合、最初にファイル調整を実装noteFileSystemChanged:し、FCが気になるアプリに通知していないことを確認してから使用します。

于 2012-09-29T05:03:55.943 に答える