2017-12-11 19 views
0

純粋なC++からUserNotificationを投稿しようとしています。私はこのSO答えの私のコードを基にしています:https://stackoverflow.com/a/14083212/5548305NSUserNotification from C++

今私はオブジェクトのプロパティの値を設定する際に問題があります。私は何かが欠けていると確信しています。私は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 here 


    objc_msgSend(pool, sel_registerName("release")); 
    return 0; 
} 

答えて

1

このコードは実際にコンパイルされますか? AppleのObjective-Cランタイムに関するドキュメントは、近年ずっと悪化していますが、私は思い出しておらず、sel_setValueの言及は見つかりません。

-setValue:forKey:は、他のどのような普通のメッセージであるので、私はより多くのようなものを期待したい:objc_msgSendは、可変個の引数を取ることを理由に

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

を、最初の二つは、ターゲットオブジェクトであることと、セレクタ、および残りの部分はメソッドの他のさまざまな引数です。ターゲットキー名は文字列として提供され、プロパティに内部的にマップされ、いくつかの異なる組み合わせが試されます。この場合、プロパティは文字列を保持することも想定しています。

setValue:forKey:の宣言された戻り値の型はvoidです。したがって、キャッチする戻り値はありません。これは思えない

+0

これが動作するようになって終わる行なったし、純粋なCでNSUserNotificationを投稿する方法を示しgithubの上でプロジェクトを作りました働くこれまでのところ何のエラーもありません。あなたの質問に答えて、それはコンパイルしましたが、ランタイム中にエラーが発生しました... – JLegendre