我正在努力向使用 undoManager
的 Swift 库添加一些测试。在库的演示中,将以下打印添加到 viewDidAppear:
会导致打印 NSUndoManagerObject
。
override func viewDidAppear(animated: Bool) {
super.viewDidAppear(animated)
print(undoManager)
}
我为测试编写了另一个 ViewController,当我在 ViewController 的 viewDidAppear:
中有相同的代码时,打印了 nil
。
我正在使用以下代码为测试创建 ViewController:
override func setUp() {
super.setUp()
// Put setup code here. This method is called before the invocation of each test method in the class.
let storyboard = UIStoryboard(name: "Main", bundle: NSBundle(forClass: self.dynamicType))
viewController = storyboard.instantiateInitialViewController() as! ViewController
viewController.viewDidLoad()
viewController.viewDidAppear(false)
// Test and Load the View at the Same Time!
XCTAssertNotNil(viewController.view)
}
我在 ViewController 的 viewDidLoad:
中调用了 becomeFirstResponder()
。
我想测试使用默认 undoManager
的逻辑,所以我需要弄清楚为什么它是 nil
。我试过为默认的 undoManager
分配一个 NSUndoManager
的新实例,但它是一个只读属性。
这是 Github repository如果您有兴趣查看代码。
最佳答案
我无法使用默认的 undoManager
来测试这个项目,但我最终使用了以下我认为同样有效的解决方案。在使用 undoManager
的类中,我添加了一个私有(private)的 NSUndoManager
变量,然后在 init
中定义它,如下所示:
classUndoManager = undoManager
if classUndoManager == nil {
classUndoManager = NSUndoManager()
}
任何使用 undoManager
的地方现在都使用 classUndoManager
。
关于ios - 测试时默认 undoManager 为 nil,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36273800/