在监视文件中由self创建的修改不会从FSEventStreamCreate调用回调

时间:2016-03-27 09:58:53

标签: cocoa fsevents

我正在尝试在我的OS X应用程序中创建一个控制台窗口,它基本上显示存储在〜/ Library / Application Support / CocosBuilder / cocosbuilder.log中的应用程序日志文件的内容

我从我的应用程序中重定向了所有NSLog语句:

+ (void)redirectNSLogToDocumentFolder
{
    NSString *logFilePath = [self logfilePath];
    freopen([logFilePath cStringUsingEncoding:NSASCIIStringEncoding],"a+",stderr);
}

然后我在文件夹中注意修改:

- (void)subscribeFileSystemChanges
{
    NSString* _pathToObserve = [ConsoleWindow logfileDir];
    NSArray * pathArray = [NSArray arrayWithObject:_pathToObserve];

    // if already subscribed then unsubscribe
    if (stream)
    {
        FSEventStreamStop(stream);
        FSEventStreamInvalidate(stream);
        FSEventStreamRelease(stream);
    }

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

    stream = FSEventStreamCreate(kCFAllocatorDefault,
                                 (FSEventStreamCallback)refreshConsoleTextView,
                                 &context,
                                 (__bridge CFArrayRef)pathArray,
                                 kFSEventStreamEventIdSinceNow,
                                 1.0,
                                 kFSEventStreamCreateFlagWatchRoot);

    FSEventStreamScheduleWithRunLoop(stream, CFRunLoopGetCurrent(),
                                     kCFRunLoopDefaultMode);

    FSEventStreamStart(stream);
}

当我从终端向我的日志文件添加内容时调用了我的回调方法refreshConsoleTextView:

echo "toto" >> cocosbuilder.log 

但是当我自己的应用程序向他们的日志文件写入内容时(我的NSLog重定向),它没有被调用。 我没有使用标志kFSEventStreamCreateFlagIgnoreSelf

你有什么想法吗?

0 个答案:

没有答案