これは簡単な質問です:
2つの異なるViewControllerがあり、それぞれの.mファイルに独自のデータが保存されています。たとえば、ViewController1で宣言されている整数値(int i=3;
)を取得して、それをViewController2に渡すので、2番目のViewControllerでその値を使用できるようになります。
誰か教えてもらえますか?
これは簡単な質問です:
2つの異なるViewControllerがあり、それぞれの.mファイルに独自のデータが保存されています。たとえば、ViewController1で宣言されている整数値(int i=3;
)を取得して、それをViewController2に渡すので、2番目のViewControllerでその値を使用できるようになります。
誰か教えてもらえますか?
2014編集-誰かがこれに遭遇した場合に備えて、私に耳を傾けないでください。「より良い方法」は本当に最良の方法です。
良い方法-ViewController2で独自のinitWithIメソッドを作成します
より良い方法-通常どおりViewController2を作成し、値をプロパティとして設定します。
最善の方法-これはコードの臭いです。データをViewControllerと緊密に結合しています。代わりにCoreDataまたはNSUserDefaultsを使用してください。
ViewController1をUINavigationControllerに埋め込む場合、これはかなり一般的なユースケースです。ViewController1内で、ViewController2を表示する場所に次のコードを追加します(たとえば、アクションで)。
ViewController2 *controller = [[ViewController2 alloc] initWithNibName:<nibName> bundle:nil];
[controller setData:<your shared data>];
[self.navigationController pushViewController:controller animated:YES];
[controller release];
残りはナビゲーションコントローラーが処理します。
値を使用して新しいViewControllerを初期化します。
- (id)initWithValue:(int)someValue {
if (self = [super initWithNibName:@"MyViewController" bundle:nil]) {
myValue = someValue;
}
return self;
}
次に、他のView Controllerから(この他のView Controllerがによって所有されていると想定UINavigationController
)
- (void)showNextViewControler {
MyViewController *vc = [[[MyViewController alloc] initWithValue:someValue] autorelease]
[self.navigationController pushViewController:vc animated:YES];
}
および/または初期化後にそれを行うには、それを設定できるメソッドまたはプロパティを作成します。
- (void)setSomeValue:(int)newValue {
myValue = newValue;
}
それで
- (void)showNextViewControler {
MyViewController *vc = [[[MyViewController alloc] initWithNibName:@"Foo" bundle:nil] autorelease]
[vc setValue:someValue]
[self.navigationController pushViewController:vc animated:YES];
}