【问题标题】:Object value is not aceesing in other Class对象值不在其他类中访问
【发布时间】:2012-06-26 05:16:31
【问题描述】:

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

【问题讨论】:

标签: objective-c ios


【解决方案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];

【讨论】:

  • 它工作正常,但请告诉我一件事为什么我不能通过创建对象来做到这一点......谢谢你的回应..
  • 您实现的方法可用于将数据从另一个视图控制器转发到视图控制器,您可能正在推送到导航堆栈。在将值传递回导航堆栈时,您必须使用委托和协议
猜你喜欢
  • 1970-01-01
  • 2012-12-14
  • 2018-09-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-09-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多