来自纯 C++ 的 NSUserNotification
NSUserNotification from pure C++
我正在尝试 post 来自纯 C++ 的 UserNotification。我的代码基于这个 SO 答案:
现在我无法为对象属性设置值。我确定我缺少某些东西。我试图利用 setValue:forKey
但我找不到任何关于它的文档。我搜索了 objc-runtime.h 和 obj.h 但找不到任何让我跳出来的东西。有人 tried/succeeded 在这吗?
#include <CoreFoundation/CoreFoundation.h>
#include <objc/objc.h>
#include <objc/objc-runtime.h>
#include <iostream>
int main(int argc, char** argv)
{
id app = NULL;
id notif = (id)objc_getClass("NSUserNotification");
notif = objc_msgSend(notif, sel_registerName("alloc"));
notif = objc_msgSend(notif, sel_registerName("init"));
notif = sel_setValue(CFSTR("title"), id("title")); <-This line here
objc_msgSend(pool, sel_registerName("release"));
return 0;
}
该代码真的可以编译吗? Apple 的 Objective-C 运行时文档近年来变得更糟,但我不记得也找不到任何提及 sel_setValue
.
-setValue:forKey:
与其他任何消息一样只是一条常规消息,所以我希望它更像:
objc_msgSend(notif, sel_registerName("setValue:forKey:"),
CFSTR("title"), CFSTR("title"))
因为 objc_msgSend
接受可变数量的参数,前两个是目标对象和选择器,其余是方法的各种其他参数。目标键名称以字符串形式提供,它们在内部映射到属性,并尝试了一些不同的组合,在这种情况下,属性 也希望包含一个字符串。
setValue:forKey:
的声明 return 类型是 void
,因此没有要捕获的 return 值。
如果将来有人试图实现这一点,我确实最终实现了这一点,并在 github 上制作了一个项目,展示了如何 post 在纯 C 中创建 NSUserNotification。
我正在尝试 post 来自纯 C++ 的 UserNotification。我的代码基于这个 SO 答案:
现在我无法为对象属性设置值。我确定我缺少某些东西。我试图利用 setValue:forKey
但我找不到任何关于它的文档。我搜索了 objc-runtime.h 和 obj.h 但找不到任何让我跳出来的东西。有人 tried/succeeded 在这吗?
#include <CoreFoundation/CoreFoundation.h>
#include <objc/objc.h>
#include <objc/objc-runtime.h>
#include <iostream>
int main(int argc, char** argv)
{
id app = NULL;
id notif = (id)objc_getClass("NSUserNotification");
notif = objc_msgSend(notif, sel_registerName("alloc"));
notif = objc_msgSend(notif, sel_registerName("init"));
notif = sel_setValue(CFSTR("title"), id("title")); <-This line here
objc_msgSend(pool, sel_registerName("release"));
return 0;
}
该代码真的可以编译吗? Apple 的 Objective-C 运行时文档近年来变得更糟,但我不记得也找不到任何提及 sel_setValue
.
-setValue:forKey:
与其他任何消息一样只是一条常规消息,所以我希望它更像:
objc_msgSend(notif, sel_registerName("setValue:forKey:"),
CFSTR("title"), CFSTR("title"))
因为 objc_msgSend
接受可变数量的参数,前两个是目标对象和选择器,其余是方法的各种其他参数。目标键名称以字符串形式提供,它们在内部映射到属性,并尝试了一些不同的组合,在这种情况下,属性 也希望包含一个字符串。
setValue:forKey:
的声明 return 类型是 void
,因此没有要捕获的 return 值。
如果将来有人试图实现这一点,我确实最终实现了这一点,并在 github 上制作了一个项目,展示了如何 post 在纯 C 中创建 NSUserNotification。