2011-05-14 66 views
-1

我希望能夠初始化我的一個類的東西,看起來像這樣警告:「衝突的類型...」創建Objective-C(IOS)初始化

ModelClass *aModelClass = [[ModelClass alloc] initWithXML:imageXML]; 

所以這個時候是我在接口文件寫道:

-(id)initWithXML:(TBXMLElement *)imageXML 

像這樣在實現文件:

-(id)initWithXML:(TBXMLElement *)imageXML 
{ 
    self = [super init]; 

    if(imageXML) 
    { 
     // do stuff with self.foo 
     return self; 
    } 
    return nil; 
} 

所以我已經在接口文件和執行文件中聲明瞭它。但是,我得到的兩個錯誤是它們相互衝突。那麼如果不在兩者中聲明完全相同的方法簽名,我該如何做到這一點?

錯誤我現在得到的是:

衝突的類型 ' - (ID)initWithXML:(TBXMLElement *)imageXML'

我在this article看主要是爲了瞭解要做到這一點,並理解Objective-C應該如何實現,但這並不能幫助我解決問題。

+0

你在聲明後缺少一個分號;不過,我認爲這只是你轉錄時的一個錯誤。 – 2011-05-14 04:35:48

回答

1

您正在返回nil。您 必須 應始終返回一個對象。 (感謝約什的指出你並不總是需要返回一個對象)像這樣:

-(id)initWithXML:(TBXMLElement *)imageXML { 
    if (self = [super init]) { 
     if(imageXML) { 
      // do stuff with self.foo 
     } 
    } 
    return self; 
} 

而且,我只記得遇到類似的東西我自己。請確保您在兩個類別中都導入了TBXML.hModelClass以及您在創建ModelClass的控制器。問題是編譯器不知道什麼是TBXMLElement,所以你需要通過導入相關的頭文件來指示它。

+0

感謝您的接觸,但這並不能解決我得到的多種警告。 – JeroenEijkhof 2011-05-14 04:16:41

+0

請閱讀我的編輯。 – 2011-05-14 04:19:28

+0

沒什麼區別,它在開始時帶走了(id),並且由於某種原因解決了它。 – JeroenEijkhof 2011-05-14 04:25:54

1

這可能不是,但你真的出現在你的接口定義缺少分號:

-(id)initWithXML:(TBXMLElement *)imageXML 

應該

-(id)initWithXML:(TBXMLElement *)imageXML; 

但也許這只是一個複製和粘貼在編寫問題時出錯。

另外,還要確保你

#import "TBXML.h" 
在ModelClass.h

(如果包括在ModelClass.h那麼導入ModelClass.h也將獲得定義,TBXMLElement他們將需要其他的.m文件。

+0

這實際上可能是問題所在。我並沒有從根本上做到這一點,可悲的是,儘管我試圖找到根本原因,但我突然無法複製這個問題,但我不確定是否解決了這個問題。 – JeroenEijkhof 2011-05-15 05:41:45

+0

好吧,無論哪種方式很高興你的問題解決了。如果你不想接受你所擁有的兩個中的任何一個,並且接受它,也許還需要添加你自己的答案。這只是爲了讓人們知道你還沒有找到答案。 – idz 2011-05-15 05:50:34

-1

感謝您的幫助! 雖然這兩個解決方案都貼在「sudo rm -rf」和「idz」這兩個解決方案似乎很有可能,但我一直在黑暗中尋找問題的原因,但沒有找到問題的原因。

我工作後,我簡單地刪除了我的代碼,並從頭開始寫了一遍。