最近我写了一些代码,我试图引用一个UIViewController我刚刚实例化[storyboard instantiateViewControllerWithIdentifier]的插座并修改插座在显示之前指向的子视图ViewController.它没有用,因为它ViewController的视图还没有加载它的子视图,包括我的出口所指的那个,所以属性只给了我一个空指针.
(有一些挣扎)追踪我的问题的原因在调试后,我用Google搜索周围和教训,通过像回答这一个,我可以使视图加载其子视图,而不通过调用显示myViewController.view吸气.在那之后,我可以毫无问题地访问我的插座.
不过,这是一个明显的黑客攻击,Xcode - 非常正确 - 不喜欢它,并愤怒地抗议这个警告:
未使用的属性访问结果 - 不应将getter用于副作用
是否有一种非hacky替代方法可以做到这一点,而不涉及滥用.view吸气剂?或者,是否存在针对此场景的规范/惯用模式,包括动态添加处理程序以在加载子视图时立即调用?
或者是标准的解决方案只是替代myViewController.view与[myViewController view]闭嘴Xcode的警告,然后用破解生活?
我正在尝试编写单元测试,目前我尝试测试接收数据的 viewController viewDidLoad(),数据是在 alamofire 请求之后设置的。问题是,在我的测试函数中,当我检查成功请求后应该用 10 个元素填充的数组时,它是 0。我已经检查viewDidLoad()过测试中是否没有执行,但应该是,因为当我刚刚将元素添加到请求之外的另一个数组中,具体测试有效。我想,这与请求有关,到目前为止我还没有找到答案。
这是代码(这个带有解释的问题,帮助我执行了 viewController 的 viewDidLoad() ):
ViewController简化:
class ViewController: UIViewController {
var itemsFromRequest: [Int] = []
var itemsWithoutRequest: [Int] = []
override func viewDidLoad() {
super.viewDidLoad()
// array with 10 elements
itemsWithoutRequest = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
Alamofire.request(url: URLConvertible).responseJSON { response in
//...error handling, parsing etc.
// set array after successful response
self.itemsFromRequest = responseData
}
}
}
Run Code Online (Sandbox Code Playgroud)
ViewControllerTests 类: …