이글은 macOS용 NSTableView관련하여 구현하는 방법을 설명합니다.
iOS 아이폰용 설명이 아니니 오해 없으시기 바랍니다.
사용자 정의 유효성검사(Validation)을 하려면
원하는 컬럼의 Table View Cell을 선택하고 Bindings Inspector의 Value를 펼치고
Validates Immediately를 체크합니다.
이렇게 하면
사용자 정의 메소드를 찾아 있으면 호출하게 됩니다.
validateKEY (_ : error :) 텍스트 필드에 새 값을 입력하면 바인딩 시스템에서 validateKEY (_ : error :) 스키마에 따라 명명 된 메서드를 찾습니다. 이 경우 키가 raise이므로 시스템은 Employee에서 validateRaise (_ : error :)라는 메서드를 찾습니다. 이 메소드가있는 경우, 다음과 같은 서명이 있어야합니다.
이 메서드는 선택적 NSNumber 및 NSError 포인터를 사용합니다. 그것들은 write-by-writeback을 허용하기 때문에 포인터 매개 변수를 필요로합니다. 즉,이 메서드를 호출하는 코드로 정보를 다시 전달할 수 있습니다. 첫 번째 매개 변수를 통해 선택적 NSNumber를 호출 코드에 전달하고 두 번째 매개 변수를 통해 NSError를 전달할 수 있습니다.
첫 번째 매개 변수에는 바인딩에서 유효성을 검사하려는 값도 포함됩니다. 메모리 값 raiseNumberPointer.memory를 사용하여이 값에 액세스합니다.
메서드는 Bool을 반환합니다. false를 반환하면 raiseNumberPointer의 값이 유효하지 않습니다. 일반적으로 값이 유효하지 않은 경우 오류 매개 변수를 통해 호출 코드로 되돌아 오는 이유를 설명하는 NSError를 전달하려고합니다.
func validateRaise(_ raiseNumberPointer: AutoreleasingUnsafeMutablePointer<NSNumber?>) throws { print(">>>>> validateRaise"); let raiseNumber = raiseNumberPointer.pointee if raiseNumber == nil { let domain = "UserInputValidationErrorDomain" let code = 0 let userInfo = [NSLocalizedDescriptionKey : "An employee's raise must be a number."] throw NSError(domain: domain, code: code, userInfo: userInfo) } } |
swift 3.0에서는 첫번째 파라미터에 내부,외부파라미터가 동일하다는 뜻의 언더바 _를 반드시 붙여야 합니다.
간단히 말하면 validateKEY하는 형식으로 메소드를 구현하면 Cocoa에서 있으면 알아서 호출해주게 됩니다.
여기서는 Raise라는 변수를 사용했기 때문에 validateRaise호출하게 되는거죠.
AutoreleasingUnsafeMutablePointer<NSNumber?>형으로 지정된 파라미터 raiseNumberPointer에서 입력된 값을 가져올수 있고
이것에 대한 사용자정의 코드를 작성하여 유효성을 체크하면 됩니다.
이게 핵심입니다.
아무것도 입력하지 않으면 nil체크가되고 개발자가 지정한 "An employee's raise must be a number. "가 출력됩니다. ^^
잘되네요.
'TIP-맥OS' 카테고리의 다른 글
macOS Archiving 객체 직렬화 (아카이브) , Serialization(시리얼라이제이션) (0) | 2017.05.13 |
---|---|
macOS NSUndoManager 세련된 방법으로 실행취소(되돌리기) 구현 (0) | 2017.05.07 |
macOS TableView와 NSArrayController사용하여 구현하기 - #3 (0) | 2017.04.19 |
macOS TableView와 NSArrayController사용하여 구현하기 - #2 (0) | 2017.04.18 |
macOS TableView와 NSArrayController사용하여 구현하기 - #1 (0) | 2017.04.16 |