Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cocoa/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Cocoa 在XPC服务中使用FSEventStream不起作用_Cocoa_Fsevents_Xpc - Fatal编程技术网

Cocoa 在XPC服务中使用FSEventStream不起作用

Cocoa 在XPC服务中使用FSEventStream不起作用,cocoa,fsevents,xpc,Cocoa,Fsevents,Xpc,我在XPC服务中使用FSEventStream时遇到了很大的问题(代码如下)。服务启动,创建流,但从不调用回调函数。当我将完全相同的代码复制到我的主应用程序并运行它时,它工作得很好。它在XPC服务中不起作用的原因可能是什么? 我尝试在这两个部分禁用AppSandbox,但它没有改变任何东西。非常感谢您在这方面的任何帮助 代码: 我的回调函数: void eventNotificationCallback(ConstFSEventStreamRef streamRef, void *userDat

我在XPC服务中使用FSEventStream时遇到了很大的问题(代码如下)。服务启动,创建流,但从不调用回调函数。当我将完全相同的代码复制到我的主应用程序并运行它时,它工作得很好。它在XPC服务中不起作用的原因可能是什么? 我尝试在这两个部分禁用AppSandbox,但它没有改变任何东西。非常感谢您在这方面的任何帮助

代码:

我的回调函数:

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]);
}
}
void eventNotificationCallback(ConstFSEventStreamRef streamRef,void*userData,size\u t numEvents,void*eventpath,const fseventstreamventflags eventFlags[],const fseventstreamventid eventid[]){
//[((u桥NPScannerServiceAgent*)用户数据。远程对象didUpdateFileSatPath:(u桥NSArray*)事件路径];
printf(“调用回调!!!\n”);
NSLog(@“从%@”获得FS更改通知,(u桥NPScannerServiceAgent*)用户数据);
尺寸i;
对于(i=0;i
默认情况下,XPC服务没有运行循环。尝试使用
FSEventStreamSetDispatchQueue()
而不是
FSEventStreamScheduleWithRunLoop()
在GCD队列而不是特定的运行循环上触发回调函数。

感谢这一技巧,这是我不知道的非常有趣的一点。我一回去就试试。顺便说一句,为什么XPC没有运行循环?我认为当调用-resume方法时,它会创建自己的运行循环,因为它永远不会返回。要点如下:在XPC的info.plist集合
RunLoopType
NSRunLoop
中,请参阅苹果的文档以获取XPC服务属性列表键:
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]);
}
}