2015-09-24 121 views
0

我有一个视图控制器,它从几个地方被调用,第一次被调用时,awakeFromNib被调用,但viewDidLoad不被调用。每次都会调用viewWillAppear和viewDidAppear。awakeFromNib被调用,viewDidLoad不被调用

此外,视图(UITableView子类)的功能正常,除了viewDidLoad中的任何内容显然未实现。

loadView在此视图控制器中未被覆盖。

用于覆盖viewDidLoad中和awakeFromNib代码:

- (void)awakeFromNib 
{ 
// Configure for self sizing cells: 
self.tableView.estimatedRowHeight = 44; 
self.tableView.rowHeight = UITableViewAutomaticDimension; 

self.tableView.allowsSelectionDuringEditing = YES; 
self.clearsSelectionOnViewWillAppear = NO; 

self.navigationItem.title = nil; 
self.navigationItem.rightBarButtonItem = nil; 
printf("\n awake from nib \n \n ---------- \n"); 
} 

- (void)viewDidLoad 
{ 
[super viewDidLoad]; 
self.navigationItem.rightBarButtonItem = self.editButtonItem; 
self.tableView.allowsSelectionDuringEditing = YES; 
} 

怎么可能是awakeFromNib的调用,但viewDidLoad中是不是,我怎么能解决这个问题?

编辑:我收到了一个帮助修复它的答案,但我想知道它为什么发生,因为它可能与我的应用程序中的错误有关。

谢谢。

+0

请为这些方法添加代码。代码也是视图初始化的地方。 –

+0

@Rage添加了代码。视图控制器在许多地方以及故事板中被实例化,所以我不相信它是问题 –

+1

我认为它不会解决您的问题,但是您应该在您的覆盖中调用'[super awakeFromNib];''。 –

回答

3

这在a comment的黑暗中有点刺,但事实证明可以解决问题。

确保在重写的方法中调用[super awakeFromNib]

+1

视图在vc之前被唤醒,vc的setView被调用,但由于它没有被唤醒,所以它不会调用viewDidLoad,而是将它推迟到唤醒之前。并没有超级召唤它永远不知道:) q.e.d. ;) - 解释为什么这会起作用 –