首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法使Objective-C函数CFNotificationCenterAddObserver在命令行中工作

无法使Objective-C函数CFNotificationCenterAddObserver在命令行中工作
EN

Stack Overflow用户
提问于 2018-04-03 03:54:41
回答 1查看 75关注 0票数 2

当我的输入法在MacOS上发生变化时,我希望得到通知,所以我有以下代码:

代码语言:javascript
复制
#import <Foundation/Foundation.h>
#import <Carbon/Carbon.h>

void notificationCallback (CFNotificationCenterRef center, void * observer, CFStringRef name, const void * object, CFDictionaryRef userInfo) {
    fprintf(stdout, "%s\n", "abc");
}

int main(int argc, const char * argv[]) {
    CFNotificationCenterRef center =  CFNotificationCenterGetDistributedCenter();

    CFNotificationCenterAddObserver(center, NULL, notificationCallback,
                                    kTISNotifySelectedKeyboardInputSourceChanged, NULL,
                                    CFNotificationSuspensionBehaviorDeliverImmediately);
    while(1) {
    }
}

并使用以下命令进行编译

代码语言:javascript
复制
/usr/bin/clang -framework foundation -framework carbon -o im-select im-select.m

它可以编译,但在运行im-select并更改输入方法后,我永远得不到反馈。

这些代码在应用程序中工作得很好,我只是不知道为什么它不能在命令行中工作。

EN

回答 1

Stack Overflow用户

发布于 2018-04-03 12:52:44

您的代码阻塞了主线程,但通知被传递到主线程。请参阅Apple docs

已为主线程注册

通知传递。

因此,您的应用程序无法接收通知。您应该使用运行循环和计时器来等待通知。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49617898

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档