干净的方式强制视图提前加载子视图

Mar*_*ery 14 uiviewcontroller uiview ios

最近我写了一些代码,我试图引用一个UIViewController我刚刚实例化[storyboard instantiateViewControllerWithIdentifier]的插座并修改插座在显示之前指向的子视图ViewController.它没有用,因为它ViewController的视图还没有加载它的子视图,包括我的出口所指的那个,所以属性只给了我一个空指针.

(有一些挣扎)追踪我的问题的原因在调试后,我用Google搜索周围和教训,通过像回答这一个,我可以使视图加载其子视图,而不通过调用显示myViewController.view吸气.在那之后,我可以毫无问题地访问我的插座.

不过,这是一个明显的黑客攻击,Xcode - 非常正确 - 不喜欢它,并愤怒地抗议这个警告:

未使用的属性访问结果 - 不应将getter用于副作用

是否有一种非hacky替代方法可以做到这一点,而不涉及滥用.view吸气剂?或者,是否存在针对此场景的规范/惯用模式,包括动态添加处理程序以在加载子视图时立即调用?

或者是标准的解决方案只是替代myViewController.view[myViewController view]闭嘴Xcode的警告,然后用破解生活?

Swa*_*any 6

我同意应该避免强制加载视图,但我遇到了一个案例,它似乎是一个问题唯一合理的解决方案(弹出一个包含UISearchController的UINeigationController,但尚未被调用导致讨厌的控制台说警告).

我所做的是使用新的iOS9 API loadViewIfNeeded,并且对于iOS9之前使用的viewController.view.alpha = 1.0.当然,在此代码之上的一个好评论将阻止您(或其他人)在以后认为不需要时删除此代码.

Apple现在提供此API信号的事实可能会不时需要.