2013-09-24 133 views
0

此代碼是昨天工作:升級到Xcode 5後,objc_msgSend在哪裏?

id urlNSString = objc_msgSend(objc_getClass("NSString"), sel_registerName("stringWithUTF8String:"), "http://zmangames.com/product-details.php?id=1246"); 
objc_msgSend(objc_getClass("EAGLView"), sel_registerName("openURL:"), urlNSString); 

我剛剛升級到Xcode中5,而現在它說,函數沒有定義。我在做

#include <objc/message.h> 
#include <objc/objc.h> 
#include <objc/runtime.h> 

這似乎是在/ usr/include中/ objc,而且似乎包含函數的定義。我沒有收到整個項目的任何其他投訴。

Codesense說的定義是這樣的:

OBJC_EXPORT id objc_msgSend(id self, SEL op, ...) __OSX_AVAILABLE_STARTING(__MAC_10_0, __IPHONE_2_0); 
+0

爲什麼你需要這樣做,而不是隻寫正常的Objective-C代碼? – nneonneo

+0

我在.cpp文件中,並且Obj-C編譯器未激活。 – Almo

+0

他可能寫了c或C++ –

回答

0

明白了。沒有仔細檢查錯誤。

Candidate function not viable: no known conversion from 'Class' (aka 'objc_class *') to 'id' (aka 'objc_object *') for 1st argument

只要有從objc_getClass從Class的返回值轉換爲id,像這樣:

id urlNSString = objc_msgSend((id)objc_getClass("NSString"), sel_registerName("stringWithUTF8String:"), "http://zmangames.com/product-details.php?id=1246"); 
objc_msgSend((id)objc_getClass("EAGLView"), sel_registerName("openURL:"), urlNSString); 
+0

爲什麼不把這個文件做成一個'.mm'文件而不是使用所有的行李? – trojanfoe

+0

它是別人的代碼庫,它是關鍵任務代碼。它將於10月3日在App Store上發佈,但我不能做一些我不確定的事情,直到我可以在其後面進行一些測試。否則,你說得很好。 :) – Almo

+1

好吧 - 被任務批評聽起來更像是一個更好的理由來拋棄那些無稽之談。 – trojanfoe

0

嘗試#import <objc/runtime.h>代替。

+0

已編輯的問題,我包括這個。 – Almo