如何实现VDKQueue来监控Cocoa中的文件?

时间:2013-01-12 21:27:48

标签: objective-c cocoa queue vdkqueue

我一直在环顾四周,看起来VDKQueue是UKKQueue的一个更现代的版本,但是我在实现它时遇到了麻烦(我在Cocoa上并不擅长)。 到目前为止我有这个但是我对我需要的其他东西(或者如果这是正确的)有点失落:

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

这个答案似乎很好地概述了如何设置它,我只是不太了解它。 现在我已经初始化了VDKQueue,如何设置修改文件时会发生什么?

Cocoa Monitor a file for modifications

从另一个答案:

  

实施非常简单:

     
      
  • 让你的控制器成为VDKQueueDelegate; (我将<VDKQueueDelegate>添加到我的AppDelegate.h)
  •   
  • 宣布VDKQueue* ivar / property; (这是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

1 个答案:

答案 0 :(得分:3)

有两种方法,都记录在the VDKQueue header file中。

方法A:通知

Add an observer上{p> the NSWorkspace's notification center了解该头文件中列出的各种VDKQueue通知。当VDKQueue发送您正在观察的通知时,通知中心将调用您的块(或者向您自己的观察者对象发送消息,如果您使用较旧但仍然完全有效的方法)。

方法B:代表

您已经将自己设置为委托,这是其中一个步骤。

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

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

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

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