6

サンドボックス化されたアプリで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のメインターゲットの概要で「アプリサンドボックスを有効にする」を無効にすると、コールバックが呼び出されます。私は何か間違ったことをしていますか?サンドボックスアプリに与えた唯一の資格は、ユーザーが選択したファイルへの読み取り/書き込みアクセスです。

4

1 に答える 1

3

ユーザーは、FSEvent を介して監視しようとしているパスを選択しましたか? 彼がそうでなければ、あなたはそれにアクセスすることを許可されず、したがってそれを監視することもできません. パスは、アクセスが許可されている場合にのみ監視できます。

于 2013-02-19T14:02:22.713 に答える