2009-03-18 13 views
8

おそらくこれは非常に単純な解決策ですが、私はそれを働かせることはできません。別のクラスの変数にアクセスするにはどうしたらいいですか?

私はCocoaファイルに複数のクラスを持っています。クラスの1つで、class1私は別のクラスで使用する必要がある変数を作成しますclass2class2にこの変数をインポートする簡単な方法はありますか?

+0

"私はCocoaファイルに複数のクラスがあります。"普通の方法は、各クラスに対して1組のファイル(MyClass.h、MyClass.m)を作成することです。これを行うには、プロジェクト内のグループを右クリックし、[ファイルの追加]をクリックします。 .mを作成すると、.hは無料で提供されます。 –

+1

インスタンス変数に直接アクセスすることは非常に悪い考えです。プロパティを使用し、アクセサーを合成するか、または独自に記述します。直接の可変アクセスはKVOやMac OS X上のバインディングなどの機能を損なってしまいます。 – Alex

答えて

13

変数をpublicにすることも、プロパティにすることもできます。例えば、それは公共作るために:

@interface Class1 
{ 
@public 
    int var; 
} 
// methods... 
@end 

// Inside a Class2 method: 
Class1 *obj = ...; 
obj->var = 3; 

それプロパティにするには:

@interface Class1 
{ 
    int var; // @protected by default 
} 
@property (readwrite, nonatomic) int var; 
// methods... 
@end 

@implementation Class1 
@synthesize var; 
... 
@end 

// Inside a Class2 method: 
Class1 *obj = ...; 
obj.var = 3; // implicitly calls [obj setVar:3] 
int x = obj.var; // implicitly calls x = [obj var]; 
+2

プロパティのアプローチははるかに良い、IMHO – Abizern

6

あなたがプロパティとしてクラス2に変数を公開することができます。 class1がclass2への参照を持つ場合、class1はその変数を見ることができます。正直なところ、Objective-Cとオブジェクト指向プログラミングの初心者のようです。私は両方の詳細を読むことをお勧めします。

Here is a place Objective-Cでオブジェクト指向プログラミングを開始する。

+3

"stackoverflow.com"は、上級ユーザー向けですか?誰が初心者なのか、誰が誰でないのかを定義する方法。男は客観的なCをどこで学ぶべきか疑問を抱かなかった。 –

+3

@DariusMiliauskas:Pに正直に同意します – preetam

3

アプリ全体でアクセスする必要がある変数を保持するファイルを作成してみてください。

extern NSString *stringVariable; 

@interface GlobalVariables 

@property (retain, nonatomic) NSString *stringVariable;  

@end 

とGlobalVariables.mファイル内

#import "GlobalVariables.h" 

@implements GlobalVariables 

@synthesize stringVariable; 

NSString *stringVariable; 

@end 

を追加し、限り、あなたはGlobalVariables.hをインポートすると、あなたがあなたの中にその変数にアクセスする必要があり、これまでの.mファイルを割り当てて、アクセスすることができますその中にあなたのプログラムのどこにいても。私は上記与えている

EDIT

私の答えは違った私は今これを行うに行くかの方法ではありません。 必要に "XCodeの" でそれは

@implementation MyClass 

@sythesize = myVariable = _myVariable; // Not that we need to do this anymore 

@end 

.mファイルに、より多くの

@interface MyClass 

@property (nonatomic, strong) NSString *myVariable; 

@end 

ようになる次に別のクラスでは、いくつかの方法で、私は

// ..... 
MyClass *myClass = [[MyClass alloc] init]; 
[myClass setMyVariable:@"My String to go in my variable"]; 
// ..... 
1

を持っているでしょうインポートを行い、それをプロパティとして宣言してオブジェクトを作成し、 "object.variable"構文を使用します。ファイル "Class2.m"は次のようになります。

#import Class2.h 
#import Class1.h; 

@interface Class2() 
... 
@property (nonatomic, strong) Class1 *class1; 
... 
@end 

@implementation Class2 

//accessing the variable from balloon.h 
...class1.variableFromClass1...; 

... 
@end 

ありがとう! :-)

関連する問題