我正在尝试在沙盒应用中使用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中的主要目标摘要中禁用“启用应用程序沙箱”时,将调用回调。难道我做错了什么?我给沙盒应用程序的唯一权利是对用户所选文件的读写访问。
答案 0 :(得分:3)
并且usere已经选择了您尝试通过FSEvent监控的路径?因为如果他没有,你就不会被允许访问它,因此也不会监视它。只要您被允许访问路径,就只能监视路径。