我正在使用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中启动连接。
答案 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.