UILabel 永远不会在 viewDidLoad 中初始化

UILabel never gets initialized in viewDidLoad

我在界面生成器中有一个 UILabel,我已连接到 属性,但它通过该视图控制器上的 viewDidLoad 保持为零。我一直在单步执行,一旦 DetailViewController 被初始化,标签 属性 就在那里,但它是 nil 并且它似乎从未被初始化。

它一直有效,直到我从使用 segues 切换到在导航控制器上执行 pushViewController。

// DetailsViewController.h

#import <UIKit/UIKit.h>
#import "TLitem.h"

@interface DetailsViewController : UIViewController

@property (nonatomic, strong) TLitem *entry;
@property (weak, nonatomic) IBOutlet UILabel *entryLabel;

@end

然后在另一个视图控制器的 table 视图中:

// EntryListViewController.m

DetailsViewController *details = [[DetailsViewController alloc] init];
[details setEntry:entry];
[self.navigationController pushViewController:details animated:YES];

并且在 viewDidLoad 中:

// DetailsViewController.m
- (void)viewDidLoad {
    [super viewDidLoad];
    [self.view setBackgroundColor:[UIColor yellowColor]];
    TLitem *entry = [self entry];
    UILabel *label = [self entryLabel];

    label.text = [entry valueForKey:@"text"];

[[DetailsViewController alloc] init] 没有从情节提要中加载视图控制器。它会创建一个新的 DetailsViewController,但不会连接来自 IB 的任何内容。查看 -instantiateViewControllerWithIdentifier:

它看起来像

DetailsViewController *details = [self.storyboard instantiateViewControllerWithIdentifier:@"Some Storyboard Identifier You Create"];
details.entry = entry;
[self.navigationController pushViewController:details animated:YES];