首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >来自纯C++的NSUserNotification

来自纯C++的NSUserNotification
EN

Stack Overflow用户
提问于 2017-12-12 04:23:15
回答 2查看 239关注 0票数 0

我正在尝试从纯C++发布一个UserNotification。我的代码就是基于这个的,所以答案是:https://stackoverflow.com/a/14083212/5548305

现在,我在设置对象属性的值时遇到了问题。我确信我遗漏了一些东西。我试图利用setValue:forKey,但我找不到任何关于它的文档。我搜索了objc-runtime.h和obj.h,但没有找到任何突然出现在我身上的东西。有没有人尝试过/成功过?

代码语言:javascript
复制
#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;
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-12-12 05:14:21

这段代码真的能编译吗?近年来,苹果关于Objective-C运行时的文档变得越来越糟糕,但我不记得也找不到任何提到sel_setValue的地方。

-setValue:forKey:只是一条普通的消息,所以我希望消息更像这样:

代码语言:javascript
复制
objc_msgSend(notif, sel_registerName("setValue:forKey:"), 
             CFSTR("title"), CFSTR("title"))

因为objc_msgSend接受的参数数量是可变的,前两个参数是目标对象和选择器,其余参数是该方法的其他各种参数。目标键名称以字符串的形式提供,它们在内部映射到属性,并尝试了几种不同的组合,在这种情况下,属性也需要保存一个字符串。

setValue:forKey:声明的返回类型是void,所以没有要捕获的返回值。

票数 1
EN

Stack Overflow用户

发布于 2018-02-12 08:29:22

如果将来有人试图做到这一点,我最终实现了这一点,并在github上做了一个项目,展示了如何用纯C语言发布一个NSUserNotification。

https://github.com/jslegendre/NS-C-UserNotification

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

https://stackoverflow.com/questions/47760811

复制
相关文章

相似问题

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