应用程序已更改CFRunLoop守护程序中的通知

时间:2015-07-26 06:18:28

标签: nsnotificationcenter core-foundation

static void registerForDriverLoadedNotification()
{
    // Snipped code that works and is not related to issue
}

static void registerForApplicationChangedNotification()
{
    NSLog(@"registerForApplicationChangedNotification!");
    NSNotificationCenter* center = [NSNotificationCenter defaultCenter];
    [center addObserverForName: nil object: nil queue: nil
            usingBlock: ^(NSNotification* notification) {
                          NSLog(@"NOTIFICATION %@ -> %@", notification.name,
                                                          notification.userInfo);
                        }];
}


int main (int argc, const char* argv[]) {
    registerForDriverLoadedNotification();
    registerForApplicationChangedNotification();

    CFRunLoopRun();

    return 0;
}

以上代码用于守护程序进程,它等待插入USB设备,然后加载配置。我想扩展此功能以检测应用程序何时启动,以及是否存在特定于应用程序的配置加载它。

但是,除了NSUserDefaultsDidChangeNotification之外,我似乎没有收到任何通知。

registerForApplicationChangedNotification中的上述代码最初是监视NSWorkspaceDidActivateApplicationNotificationNSWorkspaceDidDeactivateApplicationNotification,但我将其更改为catch-all,因此我可以看到正在发布的其他通知。

无论发生什么事情,似乎只收到NSUserDefaultsDidChangeNotification通知......这个相当简单的代码出了什么问题?

1 个答案:

答案 0 :(得分:0)

愚蠢的错误!

if (containerElement.contains(event.target) { // event.target is a descendent of containerElement }

应该是:

NSNotificationCenter* center = [NSNotificationCenter defaultCenter];