我已经使用Xcode 6的Master Detail Application
模板创建了一个新的iOS 8项目。我没有以任何方式更改代码。
如以下屏幕快照所示,在DetailViewController.m
中设置断点并检查self.splitViewController
属性时,它将返回nil
。
<< img src =“ https://image.soinside.com/eyJ1cmwiOiAiaHR0cHM6Ly9pLnN0YWNrLmltZ3VyLmNvbS84RmV4YS5wbmcifQ==” alt =“在此处输入图像描述”>
为什么??
根据Apple UISplitViewController Documentation,self.splitViewController
应该返回最接近的SplitViewController
:
如果接收者或其祖先之一是分割视图的子代控制器,此属性包含拥有的拆分视图控制器。如果视图控制器未嵌入到内部,则此属性为nil分割视图控制器。
[在您的代码示例中,我注意到从setDetailItem调用configureView。如果是从prepareForSegue调用的机会,则viewDidLoad尚未发生,而configureView中的splitViewController属性值将为nil。因此,必须在[super viewDidLoad]完成之后运行代码。
- (void)setDetailItem:(Event *)detailItem {
if (_detailItem == detailItem) {
return;
}
_detailItem = detailItem;
if(self.isViewLoaded){
// Update the view.
[self configureView];
}
}
如果要在prepareForSegue
中使用nil
,则您需要的内容否则为self.view
,并且可以防止意外加载视图,因此可以在加载视图之前(如configureView
中的视图进行详细设置) ]。