2016-03-29 4 views
1

Я работаю над добавлением некоторых тестов в библиотеку Swift, которая использует undoManager. В демо-версии библиотеки, добавив следующую печать в viewDidAppear:, напечатано NSUndoManagerObject.По умолчанию undoManager is nil при тестировании

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) 
} 

Я называю becomeFirstResponder() внутри viewDidLoad: в ViewController в.

Я хочу проверить логику, которая использует значение по умолчанию undoManager, поэтому мне нужно выяснить, почему это nil. Я попытался назначить по умолчанию undoManager новый экземпляр NSUndoManager, но это свойство только для чтения.

Вот Github repository, если вам интересно посмотреть код.

+0

Вызовите 'loadView' непосредственно перед' viewDidLoad'. – nhgrif

+0

@nhgrif Просто попробовал это без везения :(Спасибо в любом случае! – Dehli

ответ

1

Я не смог получить по умолчанию undoManager, работая с тестированием для этого проекта, но в итоге я использовал следующее решение, которое, я думаю, работает так же хорошо. В классе, который использует undoManager, я добавил частный NSUndoManager переменную, а затем определить его внутри init так:

classUndoManager = undoManager 
if classUndoManager == nil { 
    classUndoManager = NSUndoManager() 
} 

Везде, где используется undoManager теперь использует classUndoManager.

 Смежные вопросы

  • Нет связанных вопросов^_^