我一直在环顾四周,看起来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
答案 0 :(得分:3)
有两种方法,都记录在the VDKQueue header file中。
您已经将自己设置为委托,这是其中一个步骤。
步骤1是声明您符合VDKQueueDelegate
协议。如果你还没有这样做,你应该收到关于它的警告,因为setDelegate:
需要一个符合协议的对象。
步骤2是通过实际实现协议的所有必需方法来实现该承诺。目前只有一个。
第3步是将自己设置为代表。
在VDKQueue:receivedNotification:forPath:
的实现中,这是您在步骤2中实现的方法,您可以做任何您想做的事情来对文件发生的事情作出反应。