Я пытаюсь опубликовать UserNotification из чистого C ++. Я основываю свой код на этом SO ответе: https://stackoverflow.com/a/14083212/5548305
Прямо сейчас у меня проблемы с установкой значения для свойств объекта. Я уверен, что что-то мне не хватает. Я пытался использовать setValue:forKey
но я не могу найти документацию по этому вопросу. Я искал через objc-runtime.h и obj.h, но не смог найти ничего, что выскочило на меня. Кто-нибудь пробовал / преуспел в этом?
#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 hereobjc_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:
является void
таким образом, нет никакого возвращаемого значения, чтобы поймать.
Если кто-то в будущем попытается сделать это, я в итоге заставил это работать и сделал проект на github, показывающий, как разместить NSUserNotification в чистом C.