1

私は周りを見回していて、VDKQueueはUKKQueueのより新しいバージョンのように見えますが、それを実装するのに問題があります(私はまだCocoaが得意ではありません)。私はこれまでにこれを持っていますが、他に何が必要か(またはこれが正しいかどうか)について少し途方に暮れています:

VDKQueue *kqueue = [[VDKQueue alloc] init];
[kqueue addPath:path notifyingAbout:VDKQueueNotifyAboutWrite];
[kqueue setDelegate:self];

この答えは、それを設定する方法をうまく概説しているようです、私はそれを本当に理解していません。VDKQueueを初期化したので、ファイルが変更されたときに何が起こるかを設定するにはどうすればよいですか?

Cocoaファイルの変更を監視する

他の答えから:

実装は非常に簡単でした。

  • コントローラーをVDKQueueDelegate;にします。<VDKQueueDelegate>( AppDelegate.hに追加しました)
  • VDKQueue*ivar/プロパティを宣言します。(これVDKQueue *kqueue = [[VDKQueue alloc] init];ですか?)
  • デリゲートメソッドの設定VDKQueue:receivedNotification:forPath:; (どうすればこれを行うことができますか?)
  • キューを初期化し、そのデリゲートをコントローラー自体に設定します。(これはこれ[kqueue setDelegate:self]ですか;?)
  • で監視するリソースを追加しaddPath:notifyingAbout:ます。(この行を追加しました[kqueue addPath:path notifyingAbout:VDKQueueNotifyAboutWrite];

次に、デリゲートメソッドでビジネスを行います。

おそらくコードからのデリゲートメソッド?

//
//  Or, instead of subscribing to notifications, you can specify a delegate and implement this method to respond to kQueue events.
//  Note the required statement! For speed, this class does not check to make sure the delegate implements this method. (When I say "required" I mean it!)
//
@class VDKQueue;
@protocol VDKQueueDelegate <NSObject>
@required

-(void) VDKQueue:(VDKQueue *)queue receivedNotification:(NSString*)noteName forPath:(NSString*)fpath;

@end
4

1 に答える 1

3

いくつかの方法があり、どちらもVDKQueue ヘッダー ファイルに記載されています。

方法 A: 通知

そのヘッダー ファイルにリストされているさまざまな VDKQueue 通知の NSWorkspace の通知センターにオブザーバーを追加します。VDKQueue が監視対象の通知を送信すると、通知センターはブロックを呼び出します (または、古いがまだ完全に有効なメソッドを使用している場合は、独自のオブザーバー オブジェクトにメッセージを送信します)。

方法 B: デリゲート

既に自分自身をデリゲートとして設定していますが、これは手順の 1 つです。

VDKQueueDelegateステップ 1 は、プロトコルに準拠していることを宣言することです。setDelegate:プロトコルに準拠するオブジェクトが必要なため、まだこれを行っていない場合は、警告が表示されるはずです。

ステップ 2 は、プロトコルの必要なすべてのメソッドを実際に実装することによって、その約束を果たすことです。現在1台のみです。

ステップ 3 は、自分自身をデリゲートとして設定することです。

の実装VDKQueue:receivedNotification:forPath:(ステップ 2 で実装したメソッド) では、ファイルに起こったことに反応するためにやりたいことは何でもします。

于 2013-01-12T21:39:36.003 に答える