Ios 测试时,默认undoManager为零
我正在为使用Ios 测试时,默认undoManager为零,ios,swift,unit-testing,nsundomanager,Ios,Swift,Unit Testing,Nsundomanager,我正在为使用undoManager的Swift库添加一些测试。在库的演示中,将以下打印添加到viewdide:将导致打印NSUndoManagerObject override func viewDidAppear(animated: Bool) { super.viewDidAppear(animated) print(undoManager) } 我为测试编写了另一个ViewController,当我在ViewController的viewdide:中有相同的代码时,将打印
undoManager
的Swift库添加一些测试。在库的演示中,将以下打印添加到viewdide:
将导致打印NSUndoManagerObject
override func viewDidAppear(animated: Bool) {
super.viewDidAppear(animated)
print(undoManager)
}
我为测试编写了另一个ViewController,当我在ViewController的viewdide:
中有相同的代码时,将打印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
的新实例,但它是只读属性
如果您对代码感兴趣,请看下面的示例。我无法使用默认的undoManager
来进行此项目的测试,但我最终使用了以下解决方案,我认为它同样有效。在使用undoManager
的类中,我添加了一个私有NSUndoManager
变量,然后在init
中定义它,如下所示:
classUndoManager = undoManager
if classUndoManager == nil {
classUndoManager = NSUndoManager()
}
任何使用过undoManager
的地方现在都使用classUndoManager
调用loadView
之前的viewDidLoad
。@nhgrif只是尝试了一下,运气不好:(无论如何,谢谢!