对象值不在其他类中访问

时间:2012-06-26 05:16:31

标签: objective-c ios

我正在创建一个简单的基于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);                              

1 个答案:

答案 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];
相关问题