2012-02-15 7 views
0

以前はビューコントローラであったものからクラスを作成しようとしています。これにはいくつかのデータベース設定呼び出しが含まれています。私の研究では、クラスメソッドが正しく定義されていないため、「メソッドが見つかりません...」エラーが発生していました。私が持っていた相続人何:クラスメソッド内のインスタンス変数(実行不可能)

classA.h 
    +(void)databaseBuild; 

    classA.m 

    +(void)databaseBuild 
     { 
     ... 
     } 

は、しかし、私が今受けていますが、エラーの最大積載量である:

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

classA.h 
-(void)databaseBuild; 

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

これは、私は私のクラスを変更するものです。それらのすべて基本的にインスタンス変数の周りではない「変数は、」クラスメソッドでアクセス。あります 『この種のエラーを回避するためのクラスを作成するためのベストプラクティス』?Objective-Cのメソッドの

+0

どのようにこれらのメソッドを呼び出していますか? – joerick

+0

クラスメソッドでインスタンス変数にアクセスすることはできません。インスタンスを取得することはできません。あなたは何をやっているのか詳しく説明できますか?これらのメソッドの内容を含めることはできますか? –

答えて

0

- (void)method {} 

ます

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

一方一方

+ (void)method {} 
次のように使用することができるインスタンスのメソッドを作成します

がで呼び出すことができるクラスメソッドが作成されます:あなたはObjective-Cで原因クラス変数としてその存在していないようなもの実際に受信されたエラー

[MyClass method] 

を(しかし、あなたが静的変数を作成することができます回避策としてのグローバルスコープ)

+0

一般に、クラスメソッドは、自動解放されたインスタンスオブジェクトを返すためのファクトリメソッドとして使用されます。 – richerd

0

+(void)databaseBuild;はクラスメソッドです。あなたは[MyClass databaseBuild];と呼んでいます。クラスメソッドは、オブジェクトとは独立して動作するメソッドです。たとえば、[NSArray arrayWithObject:]はクラスメソッドです。

-(void)databaseBuild;はインスタンスメソッドです。あなたは[myClassInstance databaseBuild];と呼んでいます。これは、主にオブジェクトインスタンスと対話するために使用されます。 (例:[myArray objectAtIndex:]

あなたは、[view2 databseBuild];をインスタンスメソッドの呼び出しとして使用していたとします。

[view1 databaseBuild]を使用しようとしたファイルにヘッダファイルを#importすれば十分でしょう。

あなたのボートロードでは、クラスメソッドからインスタンス変数や@propertiesにアクセスできない可能性があります。

関連する問題