NSLogging UILabel的文本输出为null

时间:2013-08-09 18:43:45

标签: objective-c uilabel nslog

我有一个名为TimerViewController的自定义视图控制器及其子类FirstViewControllerFourthViewController

我在名为FirstViewController的{​​{1}} FirstViewController h中声明了.的实例。

controller viewDidLoad的{​​{1}}方法中,我有:

FourthViewController

在故事板中,我已将视图控制器ID声明为.m并声明了自定义类controller = [self.storyboard instantiateViewControllerWithIdentifier:@"mainController"]; 。然后,在mainController的{​​{1}}我有:

FourthViewController

然而,这会输出FourthViewController

为什么会这样?

4 个答案:

答案 0 :(得分:2)

mainLab必须为nil。所以你的插座可能没有连接到你的XIB。


顺便说一句,将stringWithFormat:与不是格式的字符串一起使用是浪费的。

答案 1 :(得分:1)

你忽略了告诉我们你项目的其余部分,我只是不确定它是什么。

我启动Xcode只是为了快速完成这个过程很简单。

将UI标签拖到您的XIB

控制点击标签到.h

我做了测试

#import "SOViewController.h"

- (void)viewDidLoad
{
    [super viewDidLoad];
    self.mainLabel.text = @"This is my label";
    NSLog(@"%@", self.mainLabel.text);
}

我的.h看起来像这样:

#import <UIKit/UIKit.h>
@interface SOViewController : UIViewController
@property (weak, nonatomic) IBOutlet UILabel *mainLabel;
@end

这是自定义类的一部分吗?还有其他事情发生吗?如果它是一个香草标签,它应该使用前面提到的代码没有问题。

答案 2 :(得分:1)

看起来您的mainLab尚未创建。在nil对象上调用方法时,该方法会自动返回nil。确保在运行此代码行之前实际创建标签。

答案 3 :(得分:0)

在实例化之后,您无法访问另一个控制器的标签(或任何其他UI元素),因为它的viewDidLoad方法尚未运行。如果要在另一个控制器中设置标签的文本,则必须将文本传递给该控制器,并使其在viewDidLoad方法中的标签上设置文本。所以不是这个:

controller = [self.storyboard instantiateViewControllerWithIdentifier:@"mainController"];
controller.mainLab.text = [NSMutableString stringWithFormat:@"This is a string"];

你需要这样做:

controller = [self.storyboard instantiateViewControllerWithIdentifier:@"mainController"];
controller.mainLabText = @"This is a string";

其中mainLabText是您在FourthViewController中创建的字符串属性。然后在FourthViewController的viewDidLoad:

中填充标签
self.mainLab.text = self.mainLabText;