为什么这个视图无法正确加载?

时间:2014-10-21 12:38:22

标签: ios objective-c

我已尝试以多种不同的方式从我的ChatView视图控制器推送到UserProfile视图控制器:

UserProfile.m

ChatView *chatView = [[ChatView alloc] init];
[self.navigationController pushViewController:chatView animated:YES];

此外:

UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main" bundle: nil];
ChatView *chatView = [storyboard instantiateViewControllerWithIdentifier:@"chat_view"];
[self.navigationController pushViewController:chatView animated:YES];

我也尝试了模态演示:

[self presentViewController:chatView animated:YES completion:nil];

这些实际上并没有崩溃,但它们都无法超越viewDidLoad的这一点:

JSQMessagesViewController.m

-(void)viewDidLoad
{
    ...
    NSLog(@"We see this log");

    [[NSBundle mainBundle] loadNibNamed:NSStringFromClass([JSQMessagesViewController class])
                                  owner:self
                                options:nil];

    NSLog(@"We do not see this log");
    ...
}

其他信息 当我从RecentChats视图控制器推送到此视图时,上面的代码全部绝对正常。我认为关键的区别在于我的UserProfile视图控制器本身会加载nib,而RecentChats是一个更简单的Storyboard构建的UITableViewController,我想知道是否在UserProfile加载了nib {1}}这会导致问题。

1 个答案:

答案 0 :(得分:0)

简短的回答是你做了很多根本性的错误,他们最终导致你的代码无效。

您应该阅读Apple的View Controller Fundamentals。

要说明一些问题,您使用了错误的初始化函数来查看控制器。除非子类另有指定,否则-initWithNibNamed:bundle:(从我手机上的内存输入;对不起,如果我不准确)是正确的方法。

您的视图控制器的主视图加载在-loadView方法中,而不是-viewDidLoad。如果您使用的是NIB,则应将NIB的名称传递给initialize方法,而不是通过-loadNibNamed:加载。

我可以坚持一段时间,但你明白了。