我正在创建一个简单的基于iPhone导航的应用程序。在这里,我从头等舱开始上二等。在第二节课中,我正在为string(selectedName)
设置一些值。当我回到(void)ViewWillAppear
中的第一个类时,我正在通过该类的对象访问selectedString
的值。我已经在 - (void)ViewDidLoad
方法中在第一个类中分配了第二个类的对象,但它在那里记录了null
值。请帮帮我。
在第二课中,我有一个名为selectedString的字符串,我为它设置了一些值。并记录它,它记录正常。
在第一类viewDidLoad方法中,我已经像这样分配了第二类的对象
Second *obj=[Second alloc]initWithNibName:@"Second" bundle:nil];
在viewWillAppear中的我会像这样访问selectedString,但它会记录为null。
NSLog(@"%@",obj.selectedString);
答案 0 :(得分:1)
尝试使用传递数据:
要将数据从ViewControllerB传回ViewControllerA,您需要使用协议和代理。
为此,我们将使ViewControllerA成为ViewControllerB的委托,这允许ViewControllerB将消息发送回ViewControllerA,使我们能够发回数据。
要使ViewControllerA成为ViewControllerB的委托,它必须符合我们必须指定的ViewControllerB协议。这告诉ViewControllerA它必须实现哪些方法。
1)在#import下方的ViewControllerB.h中,但在@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中,当我们弹出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,在我们将ViewControllerB推送到导航堆栈之前,ViewControllerA是它的委托。
ViewControllerB *viewControllerB = [[ViewControllerB alloc] initWithNib=@"ViewControllerB" bundle=nil];
viewControllerB.delegate = self
[self pushViewController:viewControllerB animated:YES];