我正在尝试在我的沙盒应用程序中使用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 中的主目标摘要中禁用 "启用应用程序沙箱" 时,回调被调用。我做错了什么吗?我给沙盒应用程序的唯一权限是读写用户选择的文件。
[myURL startAccessingSecurityScopedResource]
和[myURL stopAccessingSecurityScopedResource]
,但是移除最后一个调用就解决了我的问题。请将您的评论作为答案添加,这样我就可以将其标记为已解决 :-) - Nickkkdealloc
可能是一个不错的选择。 - Peter Hosey