【问题标题】:Access app delegate function in FSEvent callback在 FSEvent 回调中访问应用程序委托函数
【发布时间】:2021-05-03 05:06:29
【问题描述】:

我在应用委托文件中创建了这个函数。我想在回调中调用一个应用委托的函数。

请问有什么办法吗。

-(void) monitor{
    FSEventStreamRef stream = FSEventStreamCreate(NULL, 
                                                  &feCallback,
                                                  &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!"); 
    // need to to call app delegate function
}

【问题讨论】:

  • 不,我是新手
  • 这两样东西我都需要
  • 我知道,如何制作 appdelegate 对象。我的问题是如何在我的回调中访问函数,正如我在问题中提到的那样
  • 这个问题非常广泛。通常,FSEvents 不是解决问题的唯一方法。您可以为您的问题添加更多上下文:您在看什么文件?您要查找哪些通知?

标签: c objective-c macos cocoa fsevents


【解决方案1】:

由于 FSEventStreamCreate 仅在 macOS 上可用,您可以通过以下方式进行:

    // call this in init of your app delegate
    FSEventStreamContext  cntxt = {0, (__bridge void *)(self), NULL, NULL, NULL};
    // call FSEventStreamCreate as in your code
    // keep a reference to the stream so you can stop and start it later

然后在您的回调中,AppDelegate 将位于:

    YourAppDelegateClass* appDele = (__bridge YourAppDelegateClass*)pClientCallBackInfo; 

FSEvents 的整个机制非常复杂,我们必须将其安排在正确的运行循环中,并使用 ARC 和类型转换。回调在 ObjectiveC 之外,您将无法使用 Cocoa,而只能使用 CFString 和其他核心基础类型。不仅阅读文档而且查看框架中的 FSEvents.h 也很有帮助(任何功能上的上下文菜单,然后跳转到定义:阅读的内容比文档中的要多)。根据您的发行版,还可以使用 App Store 沙盒和安全范围的书签。

【讨论】:

    猜你喜欢
    • 2021-05-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-28
    • 1970-01-01
    • 2018-03-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多