- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在 XPC 服务中使用 FSEventStream 时遇到了很大的麻烦(代码如下)。服务启动,创建流,但从未调用回调函数。当我将完全相同的代码复制到主应用程序并运行它时,它工作得很好。它在 XPC 服务中不起作用的可能原因是什么?我尝试在这两个部分中禁用 AppSandbox,但它没有改变任何东西。非常感谢任何对此的帮助。
代码:
- (void)initEventNotificationStreamForPath:(NSString *)path {
NPDLOG(@"Starting up FS event listener for path: %@", path);
NSArray *pathsToWatch = @[path];
FSEventStreamContext context;
context.info = (__bridge void *)self;
context.version = 0;
context.retain = NULL;
context.release = NULL;
context.copyDescription = NULL;
NSTimeInterval latency = 1.0;
_eventStream = FSEventStreamCreate(NULL, &eventNotificationCallback, &context, (__bridge CFArrayRef)pathsToWatch, kFSEventStreamEventIdSinceNow, //[lastEventID unsignedLongLongValue],
(CFAbsoluteTime)latency, (kFSEventStreamCreateFlagUseCFTypes | kFSEventStreamCreateFlagFileEvents | kFSEventStreamCreateFlagWatchRoot));
if(_eventStream) {
NPDLOG(@"Scheduling event stream on runloop");
FSEventStreamScheduleWithRunLoop(_eventStream, CFRunLoopGetCurrent(), kCFRunLoopDefaultMode);
if(!FSEventStreamStart(_eventStream)) {
NPDLOG(@"Could NOT start event stream listener!!!");
}
else {
CFStringRef description = FSEventStreamCopyDescription(_eventStream);
NPDLOG(@"Stream description: %@", description);
CFRelease(description);
}
}
else {
NPDLOG(@"Could NOT create event stream listener!!!");
}
}
我的回调函数:
void eventNotificationCallback(ConstFSEventStreamRef streamRef, void *userData, size_t numEvents, void *eventPaths, const FSEventStreamEventFlags eventFlags[], const FSEventStreamEventId eventIds[]) {
//[((__bridge NPScannerServiceAgent *)userData).remoteObject didUpdateFilesAtPaths:(__bridge NSArray *)eventPaths];
printf("CALLBACK CALLED!!!\n");
NSLog(@"GOT FS CHANGE NOTIFICATION FROM %@", (__bridge NPScannerServiceAgent *)userData);
size_t i;
for(i = 0; i < numEvents; i++) {
NSLog(@"Modified path: %@, flags: %d", [(__bridge NSArray *)eventPaths objectAtIndex: i], eventFlags[i]);
}
}
最佳答案
默认情况下,XPC 服务没有运行循环。尝试使用 FSEventStreamSetDispatchQueue()
而不是 FSEventStreamScheduleWithRunLoop()
在 GCD 队列而不是特定的运行循环上触发回调函数。
关于cocoa - 在 XPC 服务中使用 FSEventStream 不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21937504/
我正在编写一个应用程序,将数据保存到特定文件夹内的一组文本文件中。当其他应用程序(例如 Dropbox 或 TextEdit)更改文件时,我有一个 FSEventStream 会收到通知,这样我就可以
我正在使用 OSX FSEventStream 监视特定目录中的文件系统更改。我正在查看文档 here我发现了一个有趣的标志,kFSEventStreamCreateFlagIgnoreSelf。 根
我们的 C++ 应用程序使用 FSEventStream 以文件级粒度监视文件系统(使用 kFSEventStreamCreateFlagFileEvents 标志创建流),每个卷一个监听器。但是,A
我在 XPC 服务中使用 FSEventStream 时遇到了很大的麻烦(代码如下)。服务启动,创建流,但从未调用回调函数。当我将完全相同的代码复制到主应用程序并运行它时,它工作得很好。它在 XPC
我已经成功地掌握了 FSEventStream 的基础知识,可以让我监视文件夹中的新文件事件。不幸的是,我传递给 FSEventStreamCreate() 的回调引用正在丢失/损坏/未保留,因此我也
我是一名优秀的程序员,十分优秀!