为什么self.splitViewController == nil?

问题描述 投票:2回答:2

我已经使用Xcode 6的Master Detail Application模板创建了一个新的iOS 8项目。我没有以任何方式更改代码。

如以下屏幕快照所示,在DetailViewController.m中设置断点并检查self.splitViewController属性时,它将返回nil

<< img src =“ https://image.soinside.com/eyJ1cmwiOiAiaHR0cHM6Ly9pLnN0YWNrLmltZ3VyLmNvbS84RmV4YS5wbmcifQ==” alt =“在此处输入图像描述”>

为什么??

根据Apple UISplitViewController Documentationself.splitViewController应该返回最接近的SplitViewController

如果接收者或其祖先之一是分割视图的子代控制器,此属性包含拥有的拆分视图控制器。如果视图控制器未嵌入到内部,则此属性为nil分割视图控制器。

ios objective-c uiviewcontroller ios8 uisplitviewcontroller
2个回答
7
投票
只有在viewDidLoad之后才配置splitViewController属性。如果偶然使用您的代码在viewDidLoad之前触发,则该值为nil。

[在您的代码示例中,我注意到从setDetailItem调用configureView。如果是从prepareForSegue调用的机会,则viewDidLoad尚未发生,而configureView中的splitViewController属性值将为nil。因此,必须在[super viewDidLoad]完成之后运行代码。


1
投票
- (void)setDetailItem:(Event *)detailItem { if (_detailItem == detailItem) { return; } _detailItem = detailItem; if(self.isViewLoaded){ // Update the view. [self configureView]; } }

如果要在prepareForSegue中使用nil,则您需要的内容否则为self.view,并且可以防止意外加载视图,因此可以在加载视图之前(如configureView中的视图进行详细设置) ]。

© www.soinside.com 2019 - 2024. All rights reserved.