Segue 后 UILabel 不更新

UILabel Not Updating After Segue

我转到一个 UIViewController,在它的初始化方法中,应该指定 2 个标签的文本。然而,这并没有发生,文本永远不会改变。所有的连接都是正确的,但是他们什么都不显示,我不明白为什么。

下面是应该更改此特定 ViewController.

的 UILabel 的代码
-(id)initWithCoder:(NSCoder *)aDecoder{
    if (self = [super initWithCoder:aDecoder]) {
        _nameLabel.text = @"NAME";
        _addressLabel.text = @"ADDRESS"; 
    }
    return self;
}

下面是它的“.h”文件:

@property (strong, nonatomic) Location *selectedLocation;

@property (weak, nonatomic) IBOutlet UILabel *nameLabel;

@property (weak, nonatomic) IBOutlet UILabel *addressLabel;

有什么想法吗?

initWithCoder: 中,视图尚未加载,这意味着即使连接正确,您的插座仍指向 nil。

只有在第一次调用视图控制器的 view 时才构建视图并连接插座。

考虑在 viewDidLoadviewWillAppear: 中执行此操作。

这更像是一种风格选择,但您可能想要综合您的属性。您可以在 init 方法上方使用 @synthesize myProperty; 来执行此操作,现在您可以像这样设置对象的属性:myLabel.text = @"Hello";

根据您调用此视图控制器的方式,可能不会始终调用 init。尝试将文本设置方法放在 viewDidLoad 甚至 viewWillAppear 中(你将不得不实现最后一个)

我猜initWithCoder:没有被调用。 建议在viewDidLoad.

设置你想要的数据
- (void)viewDidLoad
{
    [super viewDidLoad];
    self.nameLabel.text = @"NAME";
    self.addressLabel.text = @"ADDRESS"; 
}

如果未解决,请检查视图状态,例如框架、隐藏或 alpha 值。

- (void)viewWillAppear:(BOOL)animated
{
    [super viewWillAppear:animated];
    NSLog(@"[nameLabel] frame : %@, hidden : %d, alpha : %@", NSStringFromRect(self.nameLabel.frame), self.nameLabel.hidden, self.nameLabel.alpha);
    NSLog(@"[addressLabel] frame : %@, hidden : %d, alpha : %@", NSStringFromRect(self.addressLabel.frame), self.addressLabel.hidden, self.addressLabel.alpha);
}

更新: 这是因为 IBOutlet 在函数 initWithCoder:.

中是 nil

XIB-instantiated Object's IBOutlet is nil

Why isn't initWithCoder initializing items correctly?