gpt4 book ai didi

objective-c - 使用NSDistributedNotificationCenter在Objective-C中开发非GUI用户代理

转载 作者:行者123 更新时间:2023-12-03 12:52:45 26 4
gpt4 key购买 nike

我想在Objective-C中创建一个用户代理,以监听来自默认NSDistributedNotificationCenter的通知。该代理将没有GUI。但是,当我在Xcode中创建Cocoa应用程序(我还将使用分布式对象,我认为它仅在Cocoa中)时,Xcode会将项目设置为GUI应用程序。

在主函数中,我删除了NSApplicationMain(...)函数调用,以从应用程序中删除GUI元素。但是,现在我无法让线程等待(监听)来自NSDistributedNotificationCenter的通知。该应用程序只是启动并立即退出。

我研究了使用当前NSRunLoop中的NSThread,但是,看来NSRunLoop只能等待NSPort。没有提及等待NSNotifications

最佳答案

NSDistributedNotificationCenter是Foundation,因此您无需创建GUI应用程序。例如,您可以创建命令行模板,然后从终端运行它。作为一个非常简单的示例,您可以创建一个示例,该示例仅打印出它在下面收到的每个分布式通知。

要进行构建,请复制到Foundation命令行应用程序的Xcode模板中,或者简单地复制到名为 test_note.m 之类的文本文件中,然后根据注释进行构建。在此示例中,应用程序将永远不会结束(CFRunLoopRun()永不返回),您将不得不通过在终端上按CTRL + C或使用kill或 Activity 监视器之类的工具将其杀死。

// test_build.m
// to build: clang -o test_build test_build.m -framework foundation

#import <Foundation/Foundation.h>

@interface Observer : NSObject

- (void)observeNotification:(NSNotification*)note;

@end

@implementation Observer

- (void)observeNotification:(NSNotification*)note
{
NSLog(@"Got Notification: %@", note);
}

@end

int main (int argc, char const *argv[])
{
@autoreleasepool {
Observer* myObserver = [[Observer alloc] init];
[[NSDistributedNotificationCenter defaultCenter] addObserver:myObserver selector:@selector(observeNotification:) name:nil object:nil];
CFRunLoopRun();
}
return 0;
}

关于objective-c - 使用NSDistributedNotificationCenter在Objective-C中开发非GUI用户代理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8498688/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com