2013-02-19 18 views
5

Bazı dizinleri izlemek için sanal alanlı uygulamasında FSEvents kullanmaya çalışıyorum. Aşağıdaki sınıfı uygulanan:Korumalı uygulamada FSEvents kullanın

@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"); 
} 

sorun "asd" baskılı geçmez olmasıdır (yani geri arama fonksiyonu olarak adlandırılır hiçbir zaman). Xcode'ta ana hedefimin Özeti'nde "Uygulama Korumasını Etkinleştir" özelliğini devre dışı bıraktığımda, geri arama çağırılır. Yanlış bir şey mi yapıyorum? Korumalı uygulamaya verdiğim tek yetki, kullanıcı tarafından seçilen dosyalara okuma-yazma erişimi.

+1

Ve kullanıcı FSEvent üzerinden izlemeye çalıştığınız yolu seçtiniz mi? Yapmadığı için, ona erişmeye izin vermeyeceksin ve bu yüzden onu izlemeyeceksin. – Mecki

+0

Sen benim kurtuluşumsun! Ben [myURL startAccessingSecurityScopedResource] 'ı da çağırıyordum, aynı zamanda' [myURL stopAccessingSecurityScopedResource] 'dır, bu yüzden son çağrıyı kaldırmak problemimi çözer. Lütfen cevabınızı bir cevap olarak ekleyin, böylece çözdüğüm gibi onu işaretleyebilirim :-) – Nickkk

+0

@Nickkk: Muhtemelen bunu izlemeye başladıktan sonra hemen değil, yine de hemen aramalısınız. 'dealloc' muhtemelen iyi bir yer. –

cevap

2

Ve kullanıcı, FSEvent aracılığıyla izlemeye çalıştığınız yolu seçtiniz mi? Yapmadığı için, ona erişmeye izin vermeyeceksin ve bu yüzden onu izlemeyeceksin. Bir yol, yalnızca sizin erişiminize izin verildiği sürece izlenebilir.