2011-07-27 10 views
3

私は2つのビューコントローラを持っています。私は最初に、ボタンを押すと、2番目のビューコントローラがナビゲーションコントローラのスタックにプッシュされます。ここでは、2番目のビューコントローラではテーブルビューがあり、いくつかの行をタップすると(チェックボックスのように)選択され、その行に関連するデータが配列に追加されます。今私が選択を完了したら、私は最初のビューコントローラに戻り、その配列を使用したいと思います。どうやってするか?今私のアプリは次のように動作します。私は委譲プロトコルを持っていて、プロパティ配列を持っているオブジェクトを持っていて、そのオブジェクトと配列全体にアプリケーションからアクセスできます。これは正解/最高/最も単純な方法ですか?ポップされたビューコントローラからデータを渡す

答えて

6

私はプロパティ配列を持っているオブジェクトを委譲していますが、そのオブジェクトとその配列はアプリケーション全体からアクセスできますが、本当にそれは嫌です。これは正解/最高/最も単純な方法ですか?

ここでは委任が正しいパターンですが、説明する内容はグローバル変数を使用しているのであまり委任されていません。おそらく、あなたはApp Delegateにグローバル変数を格納しています。

ここでは、コードがどのように見えるかの大まかな概要です:

SecondViewController.h:

@protocol SecondViewControllerDelegate; 

@interface SecondViewController; 

SecondViewController : UIViewController 
{ 
    id<SecondViewControllerDelegate> delegate; 

    NSArray* someArray; 
} 

@property (nonatomic, assign) id<SecondViewControllerDelegate> delegate; 
@property (nonatomic, retain) NSArray* someArray; 

@end 

@protocol SecondViewControllerDelegate 
- (void)secondViewControllerDidFinish:(SecondViewController*)secondViewController; 
@end 

SecondViewController.m:

@implementation SecondViewController 

@synthesize delegate; 
@synthesize someArray; 

- (void)dealloc 
{ 
    [someArray release]; 
    [super dealloc]; 
} 

- (void)someMethodCalledWhenUserIsDone 
{ 
    [delegate secondViewControllerDidFinish:self]; 
} 

FirstViewController.h:

#import SecondViewController 

@interface FirstViewController : UIViewController <SecondViewControllerDelegate> 
{ 
    ... 
} 

@end 
は、

FirstViewController.m:私は=自己secondViewController.delegateを設定する必要がありました

@implementation FirstViewController 

- (void)secondViewControllerDidFinish:(SecondViewController*)secondViewController 
{ 
    NSArray* someArray = secondViewController.someArray 
    // Do something with the array 
} 

@end 
+0

おかげで...しかし、それは動作しませんので、おそらく私は、何か間違ったことをやっている:( – Michael

+2

。私はそれをプッシュする前に...今それは動作:)感謝再び – Michael

0

あなたはsecondViewControllerreferenceを必要とし、そのオブジェクトを作成します。

secondViewController *object2 = [[SecondViewController alloc] init]; 

object2.thatArrayは、アレイの内容を有する。そのビューコントローラを離れるときに配列がその値を保持することを確認します(または、すべてのviewControllerによってアクセスできるように配列をAppDelegateに作成できます)。

関連する問題