цель c — NSUserNotification от чистого переполнения стека

Я пытаюсь опубликовать 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;
}

0

Решение

Этот код на самом деле компилируется? Документация Apple о времени выполнения Objective-C стала намного хуже в последние годы, но я не помню и не могу найти упоминания о sel_setValue,

-setValue:forKey: это обычное сообщение, как и любое другое, так что я бы ожидал чего-то большего:

objc_msgSend(notif, sel_registerName("setValue:forKey:"),
CFSTR("title"), CFSTR("title"))

На том основании, что objc_msgSend принимает переменное число аргументов, первые два — целевой объект и селектор, а остальные — различные другие аргументы метода. Имена целевых ключей поставляются в виде строк, они сопоставляются со свойствами внутри, с несколькими различными попытками комбинации, и в этом случае свойство также будет содержать строку.

Объявленный тип возврата для setValue:forKey: является void таким образом, нет никакого возвращаемого значения, чтобы поймать.

1

Другие решения

Если кто-то в будущем попытается сделать это, я в итоге заставил это работать и сделал проект на github, показывающий, как разместить NSUserNotification в чистом C.

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

0

По вопросам рекламы [email protected]