0

シンプルな iPhone ナビゲーション ベースのアプリケーションを作成しています。これで一等から二等へ移動です。2 番目のクラスでは、いくつかの値を に設定していますstring(selectedName)。の最初のクラスに戻ると、そのクラスのオブジェクトによって の(void)ViewWillAppear値にアクセスしています。-メソッドselectedStringの最初のクラスに2番目のクラスのオブジェクトを既に割り当てていますが、そこに値を記録します。私を助けてください。(void)ViewDidLoadnull

2番目のクラスには、selectedStringという名前の文字列があり、それにいくつかの値を設定しています。ログに記録すると、正常にログに記録されます。

最初のクラスのviewDidLoadメソッドでは、このように2番目のクラスのオブジェクトを割り当てました

  Second *obj=[Second alloc]initWithNibName:@"Second" bundle:nil];

viewWillAppear メソッドで、このように selectedString にアクセスしていますが、null をログに記録します。

 NSLog(@"%@",obj.selectedString);                              
4

1 に答える 1

1

データを戻すためにこれを試してください:

ViewControllerB から ViewControllerA にデータを戻すには、プロトコルとデリゲートを使用する必要があります。

これを行うには、ViewControllerA を ViewControllerB のデリゲートにします。これにより、ViewControllerB がメッセージを ViewControllerA に送り返し、データを送り返すことができるようになります。

ViewControllerA が ViewControllerB のデリゲートになるには、指定する必要がある ViewControllerB のプロトコルに準拠する必要があります。これにより、実装する必要があるメソッドが ViewControllerA に通知されます。

1) #import の下で @interface の上にある ViewControllerB.h で、プロトコルを指定します。

@protocol ViewControllerBDelegate <NSObject>
- (void)addItemViewController:(ViewControllerB *)controller didFinishEnteringItem:(NSString *)item;
@end

2) 次に、ViewControllerB.h でデリゲート プロパティを設定し、ViewControllerB.m で合成する必要があります。

@property (nonatomic, weak) id <ViewControllerBDelegate> delegate;

3) ViewControllerB では、viewcontroller をポップするときにデリゲートでメッセージを呼び出します。

NSString *itemToPassBack = @"Pass this value back to ViewControllerA";
[self.delegate addItemViewController:self didFinishEnteringItem:itemToPassBack];

4) ViewControllerB については以上です。ViewControllerA.h で、ViewControllerA に ViewControllerB をインポートし、そのプロトコルに準拠するように指示します。

#import "ViewControllerB.h"

    @interface ViewControllerA : UIViewController <ViewControllerBDelegate>

5) ViewControllerA.m で、プロトコルから次のメソッドを実装します。

- (void)addItemViewController:(ViewControllerB *)controller didFinishEnteringItem:(NSString *)item
{
     NSLog(@"This was returned from ViewControllerB %@",item);
}

6) 最後に、ViewControllerB をナビゲーション スタックにプッシュする前に、ViewControllerA がそのデリゲートであることを ViewControllerB に伝える必要があります。

ViewControllerB *viewControllerB = [[ViewControllerB alloc] initWithNib=@"ViewControllerB" bundle=nil];
viewControllerB.delegate = self
[self pushViewController:viewControllerB animated:YES];
于 2012-06-26T05:28:55.810 に答える