将IBOutlet文本更改为从自定义类返回的对象的属性

时间:2012-02-14 17:23:22

标签: xcode delegates void iboutlet

我正在使用xCode 4.2.1 - 我有一个使用Web服务的应用程序,并使用自定义类和NSURLConnection获取一些数据。用户点击一个“刷新”按钮,它启动我项目中某些自定义类中发生的一系列事件,我可以获取对象,以及我想在MainViewController中的方法中返回的属性,我只是无法将IBOutlet的文本更改为返回对象的属性(NSString)。

在我的“MainViewController.h中,我有一个IBOutlet(它连接到MainViewController.xib中的一个按钮):

IBOutlet UILabel *textLabel;

@property (nonatomic, retain) IBOutlet UILabel *textLabel;

我在MainViewController.m中合成了标签

@synthesize textLabel;

过程如下所示:刷新按钮分接 - >在MainViewController中触发一个方法 - >在自定义类中触发另一个方法(从Web检索数据,创建对象) - >通过以下方式将对象发送到MainViewController :(在我的自定义类实现中)

// parsing, etc.. and define a string for priceString property of mp object    
MainViewController *mvc = [[MainViewController alloc] init];
    [mvc log:mp];

在我的MainViewController.m中,我可以访问该对象的属性,并在此方法中将其打印在NSLog中。

- (void) log:(Price *)mp {

    self.textLabel.text = mp.priceString;
    NSLog(@"%@", mp.priceString);
}

此时,我可以看到日志中的数据,但textLabel文本不会改变。

我一直在努力阅读一周的例子,我听到了从授权到NSNotication答案的所有内容,但似乎没有任何效果。

我需要做的就是从 - (void)方法填充IBOutlet。 任何帮助都将受到高度赞赏,我对实施授权感到失望,但我很陌生,并寻求一个例子。

编辑 - 更多细节。

经过进一步的研究,我想我应该注意到我的NSURLConnection返回我的对象​​是在一个单独的类中,我一直在阅读很多线程,人们在viewDidLoad中启动连接。

1 个答案:

答案 0 :(得分:1)

问题是您在初始化视图控制器后正在调用[mvc log:mp];。在该阶段,仍未从xib文件加载视图。

您可以更改log以查看:

- (void) log:(Price *)mp {
    if (self.textLabel) {
        self.textLabel.text = mp.priceString;
    } else {
        NSLog(@"textLabel is nil.");
    }
}

您可以在视图控制器[mvc log:mp];方法中调用viewDidLoad,或者在执行viewDidLoad之后调用它。

为了更好地理解这一点,请在NSLog(@"viewDidLoad.");方法中添加viewDidLoad,然后在初始化视图控制器的代码之后添加NSLog(@"viewController initialized.");

您将看到以下内容

viewController initialized.
textLabel is nil. // if you call log as usual after initializing the view controller.
viewDidLoad.