2012-02-15 53 views
0

我想從之前的視圖控制器創建一個類。它只包含一些數據庫設置調用。在我的研究中,我發現我收到了「沒有已知類的方法...」錯誤,因爲我沒有正確定義類方法。繼承人什麼我:類方法中的實例變量(難以處理)

View1.m 
... 
[view2 databseBuild]; 
... 

classA.h 
-(void)databaseBuild; 

classA.m 
-(void)databaseBuild 
     { 
     ... 
     } 

這是我改變了我的類:

classA.h 
    +(void)databaseBuild; 

    classA.m 

    +(void)databaseBuild 
     { 
     ... 
     } 

不過,我現在正在接受是錯誤的一大堆。所有這些基本上都是圍繞實例變量不是「變量」類方法來訪問。是否有一個‘最佳實踐’爲創建類,以避免這種類型的錯誤?

+0

你是怎麼調用這些方法的? – joerick 2012-02-15 08:09:41

+0

您根本無法訪問類方法中的實例變量 - 您沒有可​​用的實例。你能詳細說明你在做什麼嗎?也許包括這些方法的內容? – 2012-02-15 08:12:43

回答

0

的Objective-C的方法

- (void)method {} 

會創建可使用的實例方法如下:

MyClass *instance = [MyClass alloc] init]; 
[instance method] 

雖然另一方面

+ (void)method {} 

將創建一個類的方法,可以這樣調用:

[MyClass method] 

您收到由於這一事實的錯誤,有沒有這樣的事情在Objective-C類變量(但你可以創建靜態變量全球範圍作爲解決方法)

+0

通常使用Class方法作爲Factory方法返回自動發佈的實例對象。 – richerd 2012-02-15 08:17:54

0

+(void)databaseBuild;是一種類方法。你用[MyClass databaseBuild];來稱呼它。類方法是獨立於對象工作的方法。例如[NSArray arrayWithObject:]是一種類方法。

-(void)databaseBuild;是一種實例方法。你用[myClassInstance databaseBuild];來調用它,它主要用於與對象實例進行交互。 (例如[myArray objectAtIndex:]

你說你使用的是[view2 databseBuild];這是對實例方法的調用。

很可能它已經足夠#import頭文件到您嘗試使用[view1 databaseBuild]的文件中。

您的一堆錯誤可能會告訴您,您無法從類方法訪問實例變量或@properties。