2009-07-23 10 views
1

私はカスタムViewControllerを作成しています。このVCは、それを作成するイベントでわかっているいくつかのデータをロードし、それがその一部になるNavigationControllerの先頭にプッシュします。Cocoa Touch UIViewControllerプロパティとクラスデザイン

私の質問は、カスタムViewControllerの作成を処理するビューからそのカスタムViewControllerにデータを渡す方法です。

私は考えられる4つのオプションについて考えてみましたが、それぞれの機能が優れているかどうかについてフィードバックを得たいと考えていました。

1)カスタムViewControllerのパブリックプロパティを公開し、ビューのUI要素を - (void)ViewDidLoadのプロパティに基づいて設定します。

2)実際のUI要素自体を公開し、ViewControllerの作成時に.text/.image /。任意の属性を設定します。

3)のCustomView前にデータを設定し、カスタムビューのカスタムコンストラクタを作成し、私はUI要素 )両方のビューがアクセス権を持つカスタムモデルを作成し設定する必要が値を渡します作成/プッシュされ、そのデータにViewDidLoadイベントでアクセスします。

私はまだこれのすべてに慣れていません。これらのデータのハンドオフの適切な処理について理解していることを確認したいと思います。これはおそらく簡単な答えかもしれないようですが、私はまだちょっと混乱していて、メモリの損失/漏れを避けるためにこの権利を行うことが本当に重要です。

誰かが気になる場合は、iTunes UでスタンフォードのCS193pクラスを使用し、Mark/Lamarcheの「Beginning iPhone Development」を使用してiPhone用のココアを教えています。 NavigationControllerといくつかのViewController(193pに精通している場合はプレゼンス1)を使用してアプリケーションを作成しています。

答えて

1

まあ、あなたの要件に応じてそれぞれの方法には利点があると思います。しばしば、いくつかのアプローチの組み合わせが必要になります。私は、とにかく私にとって、最も一般的なことは、あなたが始めるのに十分なところでこのようなことをすることだと信じています。

MyViewController *vc = [[MyViewController alloc] init]; // (or initWithNibName:bundle:) 
// transfer vc values here 
vc.value1 = aValue; 
vc.value2 = anotherValue; 
[self.navigationController pushViewController:vc animated:YES]; 
[vc release]; 

ビューコントローラがインスタンス化された後、オブジェクトを渡す機会があります。 MyViewControllerが詳細ビューで、詳細を表示するオブジェクトを与えるとします。または、テーブルビューの場合は、表示に必要なNSArrayを与えることができます。次に、viewDidLoadまたはawakeFromNibまたはawakeFromCoderで、または...あなたが話すようにビューを記入することができます。

1

#1は

#4は私の好ましい解決策である(これら二つは相互に排他的ではない)で、または#3ことなく、微細です。私はUserViewControllerを持っていた場合たとえば、私はおそらくもこの方法をユーザーオブジェクトを持っており、それを作成したいと思います:

User *user = [self.users objectAtIndex:someIndex]; 
UserViewController *uvc = [[[UserViewController alloc] initWithUser:user] autorelease]; 

#2は良いアイデアではありません。オブジェクトは他のオブジェクトのUI要素にアクセスすべきではありません。 UIを変更することを決めたとき(そしてあなたがそうすることになるとき)、多くの問題が発生します。

関連する問題