Xcode 7/Swift 2.2 Mac OS X 프로젝트를 Xcode 8/Swift 3으로 마이그레이션 할 때 뷰 컨트롤러 클래스에서 undoManager를 사용하여 문제가 발생했습니다. MyViewController - 실행 취소 기능이 있습니다.Swift 3에서 NSUndoManager 및 .prepare (withInvocationTarget :) 사용
엑스 코드 7/스위프트 2.2, 이는 잘 작동 :
if let target = undoManager?.prepare(withInvocationTarget: self) as? MyViewController {
target.undo(data, moreData: moreData)
undoManager?. setActionName("Change Data")
}
:
는
undoManager?.prepareWithInvocationTarget(self).undo(data, moreData: moreData)
undoManager?.setActionName("Change Data)
엑스 코드 8/스위프트 3 https://developer.apple.com/library/content/documentation/Swift/Conceptual/BuildingCocoaApps/AdoptingCocoaDesignPatterns.html
에서 권장되는 패턴을 이용하여이 변경되어야
그러나 MyViewController 다운 캐스트는 항상 실패하고 실행 취소 작업은 등록되지 않습니다.
여기에 명백한 내용이 없거나 버그입니까?
감사합니다. 나는 그걸 가지고 놀았습니다. 불행히도 OS10.10과 호환되지는 않지만 계속 진행할 수있는 시간입니다. – jbaraga
OS 10.10의 해결책 :'registerUndo (with : Target : selector : object :)'를 사용하십시오. 단일 값을 저장하는 데는 아무런 문제가 없습니다. 여러 값을 저장하기 위해 사전에 압축하여 "object"매개 변수로 사용합니다. 실행 취소 작업의 경우 사전에서 압축을 풉니 다. – jbaraga
@jbaraga, 신고 해 주셔서 감사합니다. 그런데 왜 다른 답변으로 게시하지 않습니까? 10.10에서 작업해야하는 개발자에게는 도움이 될 수 있습니다. – OOPer