Cocoa 在沙盒应用程序中使用FSEvents

Cocoa 在沙盒应用程序中使用FSEvents,cocoa,monitoring,monitor,filesystemwatcher,fsevents,Cocoa,Monitoring,Monitor,Filesystemwatcher,Fsevents,我正在尝试在沙盒应用程序中使用FSEvents来监视一些目录。我实现了以下类: @implementation SNTracker - (id)initWithPaths:(NSArray *)paths { self=[super init]; if (self) { trackedPaths=paths; CFTimeInterval latency=1.0; FSEventStreamContext context={0,(

我正在尝试在沙盒应用程序中使用FSEvents来监视一些目录。我实现了以下类:

@implementation SNTracker

- (id)initWithPaths:(NSArray *)paths {
    self=[super init];
    if (self) {
        trackedPaths=paths;
        CFTimeInterval latency=1.0;
        FSEventStreamContext context={0,(__bridge void *)self,NULL,NULL,NULL};
        FSEventStreamRef eeventStream=FSEventStreamCreate(kCFAllocatorDefault,&callback,&context,(__bridge CFArrayRef)trackedPaths,kFSEventStreamEventIdSinceNow,latency,kFSEventStreamCreateFlagUseCFTypes|kFSEventStreamCreateFlagWatchRoot|kFSEventStreamCreateFlagFileEvents);
        FSEventStreamScheduleWithRunLoop(eeventStream,[[NSRunLoop mainRunLoop] getCFRunLoop],kCFRunLoopDefaultMode);
        FSEventStreamStart(eeventStream);
    }
    return self;
}

static void callback(ConstFSEventStreamRef streamRef,void *clientCallBackInfo,size_t numEvents,void *eventPaths,const FSEventStreamEventFlags eventFlags[],const FSEventStreamEventId eventIds[]) {
    NSLog(@"asd");
}

问题是“asd”永远不会被打印出来(即永远不会调用回调函数)。当我在Xcode中的主目标摘要中禁用“启用应用程序沙箱”时,将调用回调。我做错什么了吗?我给沙盒应用程序的唯一权限是对用户选择的文件进行读写访问。

并且用户已经选择了您试图通过FSEvent监视的路径?因为如果他没有,你将不被允许访问它,因此也不会监视它。只要允许您访问路径,就只能对其进行监视。

并且用户已选择了您试图通过FSEvent监视的路径?因为如果他没有,你将不被允许访问它,因此也不能监视它。你是我的救星!我正在调用
[myURL startAccessingSecurityScopedResource]
,但也调用了
[myURL stopcessingsecurityscopedresource]
,因此删除最后一个调用解决了我的问题。请添加您的评论作为答案,这样我就可以将其勾选为已解决:-)@Nickkk:您可能最终还是应该这样称呼,只是不要在您开始监控之后马上这样称呼<代码>解除锁定可能是个好地方。是的,你是对的。谢谢:-)