2015-09-16 37 views
1

我有一个UILabel在我已经连接到属性的界面生成器,但它通过视图控制器上的viewDidLoad保持零。我一直在介绍,只要DetailViewController初始化,标签属性就在那里,但它是零,它似乎从未被初始化。UILabel永远不会初始化viewDidLoad

它一直在工作,直到我从导航控制器上使用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 

然后在另一视图控制器表格视图:

// 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"]; 
+0

你提到你塞格斯改为编程推你的视图控制器。向我们展示您实例化它的代码。 –

+0

如果您的视图控制器视图和问题标签是在故事板中定义的,则应该将其实例化为'UIStoryboard'实例。 –

+0

实例化视图控制器?这是上面NewEntryListViewController.m的第一行。 – thisAnneM

回答

4

[[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]; 
+0

这个。有关插座连接等的所有信息都在故事板中。基于Storyboard的视图控制器使用'-initWithCoder:'实例化。 –

+0

谢谢! self.storyboard为零,并表示它是只读属性。有什么地方可以为整个应用程序设置故事板吗? (编辑 - 按下输入太早)。 – thisAnneM

+0

@thisAnneM编号每个视图控制器必须使用其创建者(或'storyboardWithName:')的故事板创建。你如何实例化'NewEntryListViewController'? –