0

我正在创建一个简单的基于 iPhone 导航的应用程序。在这我从一等移动到二等。在第二堂课中,我为string(selectedName). 当我回到 中的第一个类时(void)ViewWillAppear,我正在selectedString通过该类的对象访问 的值。我已经在 -(void)ViewDidLoad方法中的第一类中分配了第二类的对象,但它在null那里记录了值。请帮帮我。

在第二类中,我有一个名为 selectedString 的字符串,我为它设置了一些值。并记录它,它记录得很好。

在第一类 viewDidLoad 方法中,我已经像这样分配了第二类的对象

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

在 viewWillAppear 方法中,我像这样访问 selectedString ,但它记录为空。

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

1 回答 1

1

试试这个传回数据:

要将数据从 ViewControllerB 传递回 ViewControllerA,您需要使用协议和委托。

为此,我们将使 ViewControllerA 成为 ViewControllerB 的委托,这允许 ViewControllerB 将消息发送回 ViewControllerA,从而使我们能够发送回数据。

要让 ViewControllerA 成为 ViewControllerB 的委托,它必须符合我们必须指定的 ViewControllerB 协议。这告诉 ViewControllerA 它必须实现哪些方法。

1) 在 ViewControllerB.h 中 #import 下方但 @interface 上方您指定协议。

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

2) 接下来仍然在 ViewControllerB.h 中,您需要设置委托属性并在 ViewControllerB.m 中合成

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

3) 在 ViewControllerB 中,当我们弹出视图控制器时,我们会在委托上调用一条消息。

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 推送到导航堆栈之前,我们需要做的最后一件事是告诉 ViewControllerB ViewControllerA 是它的委托。

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