0

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

FirstViewController我声明了一个名为inFirstViewController.h的实例controller

在's的viewDidLoad方法中,我有:FourthViewController.m

controller = [self.storyboard instantiateViewControllerWithIdentifier:@"mainController"];

在情节提要中,我将视图控制器 ID 声明为mainController并声明了一个自定义类FourthViewController. 然后,在FourthViewController's.m我有:

controller.mainLab.text = [NSMutableString stringWithFormat:@"This is a string"];
NSLog(@"%@", controller.mainLab.text);

但是,这会输出(null).

为什么会这样?

4

4 回答 4

2

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


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

于 2013-08-09T18:46:10.550 回答
1

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

于 2013-08-09T21:14:30.360 回答
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

这是自定义类的一部分吗?还有其他事情吗?如果它是一个香草标签,它应该可以使用上述代码毫无问题地工作。

于 2013-08-09T20:04:56.190 回答
0

You can't access the label (or any other UI element) of another controller right after you instantiate it, because its viewDidLoad method has not yet run. If you want to set the text of a label in another controller, you have to pass the text to that controller, and have it set the text on the label in its viewDidLoad method. So instead of the this:

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

You need to do this:

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

where mainLabText is a string property you create in FourthViewController. Then populate the label in FourthViewController's viewDidLoad:

self.mainLab.text = self.mainLabText;
于 2013-08-11T06:16:14.753 回答