gpt4 book ai didi

objective-c - 处理 OSX 中的文件系统事件

转载 作者:行者123 更新时间:2023-12-03 17:35:04 26 4
gpt4 key购买 nike

所以我使用 EventStream 来监视文件夹的更改。现在一切正常,当我更改文件夹中的文件时,我可以看到日志回调,但我似乎无法调用我的folderWatch,它给出了错误“使用未声明的标识符'self'”。我可以在其他地方使用这个函数,只是不能在 fsEventsCallback 中使用。任何帮助将不胜感激!

   void fsEventsCallback(ConstFSEventStreamRef streamRef,
void *clientCallBackInfo,
size_t numEvents,
void *eventPaths,
const FSEventStreamEventFlags eventFlags[],
const FSEventStreamEventId eventIds[]){


[self folderWatch];

NSLog(@"2");
}

最佳答案

原因是 fsEventsCallback 是一个 C 函数,而不是 Objective-C 实例方法,因此 fsEventsCallback 不知道任何关于 self 的信息.

您可以使用 FSEventStreamContext 中的 info 字段将 self 传递给回调函数。以下示例假设您的类名为 Watcher

(如果您不使用 ARC,则可以省略所有 __bridge 转换。)

- (void)folderWatch
{

}

void fsEventsCallback(ConstFSEventStreamRef streamRef,
void *info,
size_t numEvents,
void *eventPaths,
const FSEventStreamEventFlags eventFlags[],
const FSEventStreamEventId eventIds[])
{
Watcher *watcher = (__bridge Watcher *)info;
[watcher folderWatch];
}

- (void)startWatching
{
FSEventStreamContext context;
context.info = (__bridge void *)(self);
context.version = 0;
context.retain = NULL;
context.release = NULL;
context.copyDescription = NULL;

NSArray *pathsToWatch = @[@"/path/to/watch"];

self.eventStream = FSEventStreamCreate(NULL,
&fsEventsCallback,
&context,
(__bridge CFArrayRef)(pathsToWatch),
kFSEventStreamEventIdSinceNow,
1.0,
kFSEventStreamCreateFlagFileEvents
);
}

关于objective-c - 处理 OSX 中的文件系统事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14190166/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com