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:通知

NSWorkspace 的通知中心添加一个观察者,用于查看该头文件中列出的各种 VDKQueue 通知。当 VDKQueue 发送您正在观察的通知时,通知中心将调用您的块(或向您自己的观察者对象发送消息,如果您使用较旧但仍然完全有效的方法)。

方法 B:委托

您已经将自己设置为代表,这是其中的步骤之一。

第 1 步是声明您符合VDKQueueDelegate协议。如果你还没有这样做,你应该得到一个警告,因为setDelegate:需要一个符合协议的对象。

第 2 步是通过实际实现协议的所有必需方法来实现该承诺。目前只有一个。

第 3 步是将自己设置为代表。

在您的 实施中VDKQueue:receivedNotification:forPath:,这是您在步骤 2 中实施的方法,您可以做任何您想做的事情来对文件刚刚发生的事情做出反应。

于 2013-01-12T21:39:36.003 回答