2013-02-19 5 views
5

サンドボックスアプリケーションでFSEventsを使用していくつかのディレクトリを監視しようとしています。サンドボックスアプリケーションで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のメインターゲットのサマリで「アプリケーションサンドボックスを有効にする」を無効にすると、コールバックが呼び出されます。私は何か間違っているのですか?サンドボックスアプリケーションに与えた唯一の権限は、ユーザーが選択したファイルへの読み書きアクセスです。

+1

そして、あなたはFSEvent経由で監視しようとしているパスを選択しましたか?彼が持っていない場合、あなたはそれにアクセスすることを許可されないので、それもそれを監視しません。 – Mecki

+0

あなたは私の救いです!私は '[myURL startAccessingSecurityScopedResource]'と '[myURL stopAccessingSecurityScopedResource]'を呼び出していたので、最後の呼び出しを削除すると私の問題は解決します。あなたのコメントを答えとして追加してください:-) – Nickkk

+0

@Nickkk:あなたはおそらくそれを最終的に、あなたが監視を開始した直後に呼び出すべきです。 'dealloc'はおそらく良い場所です。 –

答えて

2

そして、あなたはFSEvent経由で監視しようとしているパスを選択しましたか?彼が持っていない場合、あなたはそれにアクセスすることを許可されないので、それもそれを監視しません。パスは、アクセスが許可されている場合に限り監視することができます。

関連する問題