有幾個使用FSEvent來偵聽文件系統中的更改的示例。在FSEventStreamCreate中聲明回調函數
How to listen for file system changes MAC - kFSEventStreamCreateFlagWatchRoot
和
FSEvents weirdness on OS X Leopard
當FSEventStreamCreate
創建活動,他們似乎都經過回調項就好了。沒有參數或任何東西,只是&feCallback
。基本上看起來好像他們傳遞了一個變量而不是一個函數,如果這是有道理的話。
但是,當我嘗試這樣做時,出現Use of Undeclared identifier
錯誤。是什麼賦予了?
FSEventStreamRef stream = FSEventStreamCreate(NULL,
&feCallback, // what does '&' mean? Why are no parameters passed?
&cntxt,
pathsToWatch,
kFSEventStreamEventIdSinceNow,
1,
kFSEventStreamCreateFlagWatchRoot);
,再後來有回調函數:
static void feCallback(ConstFSEventStreamRef streamRef,
void* pClientCallBackInfo,
size_t numEvents,
void* pEventPaths,
const FSEventStreamEventFlags eventFlags[],
const FSEventStreamEventId eventIds[])
{
NSLog(@"The file changed!");
}
我喜歡一些示例代碼在這裏得到開源輔助對象的工作:https://bitbucket.org/boredzo/fs-notifier/overview
但同樣的事情。它具有方法:
- (id) initWithCallback:(FSEventStreamCallback)newCallback path:(NSString *)newPath;
,我不能將它傳遞一個newCallback
因爲上述錯誤的。
呵呵。我從來沒有想到,簡單地重新排序實際功能會使這項工作成爲可能。我認爲我需要以某種方式「創建」這個功能,我顯然遇到了麻煩。如果你在'FSEventStreamCreate'的方法上面寫了'static void feCallback'位,那麼一切正常。猜猜這是一個來自Java/C#背景(所有這些都是自動完成的)的地方,對於Obj-C來說有點痛苦。 :) 謝謝您的幫助。 – cksubs