相关疑难解决方法(0)

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

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

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

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

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

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

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

uiviewcontroller uiview ios

14
推荐指数
2
解决办法
9062
查看次数

在 viewDidLoad 之后未在测试中设置 XCTest 单元测试数据响应

我正在尝试编写单元测试,目前我尝试测试接收数据的 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 类: …

unit-testing xctest swift alamofire swift3

2
推荐指数
1
解决办法
818
查看次数