我正在为使用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存储库。
我无法获得用于该项目测试的默认undoManager
,但我最终使用了以下解决方案,我认为它也同样有效。在使用undoManager
的类中,我添加了一个私有NSUndoManager
变量,然后在init
中定义它,如下所示:
classUndoManager = undoManager
if classUndoManager == nil {
classUndoManager = NSUndoManager()
}
使用undoManager
的任何位置现在都使用classUndoManager
。