2013-05-10 49 views
1

我正在使用CocosBuilder 2.1和Cocos2d-iPhone 2.0。我已經獲得了CocosBuilder的編譯,並且在我的項目中使用他們的單文本標籤示例時出現了一個奇怪的問題。爲什麼NSClassFromString在這兩種情況下返回零或不是?

這裏是有問題的代碼,從CCBReader.m路823:

Class class = NSClassFromString(className); 
if (!class) 
{ 
    NSLog(@"CCBReader: Could not create class of type %@",className); 
    return NULL; 
} 

這種失敗與文本「無法創建類類型CCLabelTTF的」。但如果我改變這樣的代碼:

Class class = NSClassFromString(className); 
if (!class) 
{ 
    CCLabelTTF* tempLabel = [[CCLabelTTF alloc] init]; 
    [tempLabel release]; 
    NSLog(@"CCBReader: Could not create class of type %@",className); 
    return NULL; 
} 

它的工作原理。在這個地方我沒有看到其他人遇到過CocosBuilder問題,所以發生了什麼事?

奇怪的是,這種改變只能在編譯器級別影響它,因爲添加的代碼在錯誤段內,對嗎?

+0

什麼是'className'? – Undo 2013-05-10 13:17:44

+0

className是一個NSString *。 – Almo 2013-05-10 13:19:23

+0

否 - 什麼是*內容*? – Undo 2013-05-10 13:20:55

回答

3

因爲您在項目中根本沒有使用CCLabelTTF,所以運行時沒有爲您加載類。

它在你做了黑客攻擊之後就起作用了,因爲你的項目現在使用了CCLabelTTF類,所以運行庫會加載它。

來解決這個問題,添加-ObjC到鏈接器標誌,檢查細節在以下鏈接

http://developer.apple.com/library/mac/#qa/qa1490/_index.html https://stackoverflow.com/a/2615407/642626

+0

這會導致其他鏈接器錯誤的加載......正在處理它。 – Almo 2013-05-10 13:30:25

+0

是什麼問題? – 2013-05-10 13:31:15

+0

看起來像其他一些庫不包含在構建中。我可能只需要包含OpenAL庫或其他東西。 – Almo 2013-05-10 13:31:58

0

apple documentation

通過aClassName命名的類的對象,或者零如果當前沒有裝載類叫這個名字。如果aClassName爲零,則返回nil。

變量「className」爲零,或者在此調用之前未在運行時加載類。 試圖強行加載這個類有這樣的:

[CCLabelTTF class]; 

在代碼的任何地方。

未來:在創建新的之前,請嘗試搜索your question

+0

我搜索了,並找到了您發佈的鏈接。它沒有回答我的特定問題。 – Almo 2013-05-10 13:29:10

+0

我不能做[CCLabelTTF類],因爲className來自一個文件,我不知道它會是哪個類。 – Almo 2013-05-10 13:29:55

+0

然後在你的問題中指定這個信息,其他答案可能會有幫助,然後 – 2013-05-10 13:31:19

相關問題