2016-11-14 3 views
0

선택 사항 인 데이터 유형의 속성에 대해 코코아 바인딩을 설정하려면 어떻게해야합니까?코코아 신속한 선택 속성에 바인딩

I 차례로로서 정의된다 [등록]의 일 어레이의 객체 관리되는 키 바인딩을 통해 NSArrayController 데이터를 표시하는 NSTableView는 가지고 MainViewController에

class Property: NSObject { 
     var distance: CLLocationDistance  
     var ETA: TimeInterval?     
     var coordinates: CLLocationCoordinate2D 
     // other properties and methods here 
    } 

는 I 정의를

var properties: [Property] = [] 
    @IBOutlet var arrayController: NSArrayController! 
arrayController가 properties 어레이에 결합 된

, NSTableView가 어레이 제어기에 결합 된 (컨트롤러 키 = arrangedObjects) 및 그런 다음 개별 셀 TableViewCells이 테이블 셀 뷰 (모델 키 경로 = objectValue.distance 등)의 다양한 속성에 바인딩됩니다.

코드는 아무런 문제없이 컴파일되지만 런타임에 테이블을로드 할 때 충돌합니다. properties.ETA은 선택 사항이므로 ETA 열에 문제가 있습니다. 이 문제를 다루기위한 적절한 방법은 무엇입니까? 고마워요

답변

0

적어도 직접적으로는 할 수 없습니다.

코코아 바인딩은 Objective-C 런타임을 통해 작동하며 ObjC는 객체 (일명 참조라고도 함) 유형이 아닌 Swift Optionals를 나타내는 방법이 없습니다. (즉, ObjC에서 NSWindow?, 또는 심지어 AnyObject? 있지만 액세스 할 수있는 Int? 또는 CGRect? 또는 TimeInterval?.)

여기에 가장 좋은 것들을 당신이에서와 방법을하고 다시 가을에 아마 ObjC - ETA을 선택 사항이 아닌 TimeInterval으로 만들고, ETA가 설정되지 않은 경우를 나타 내기 위해 일부 센티넬 값 (음수 값 - 거 ~?)을 사용하십시오. 값 변환기를 사용하여 UI에서 이러한 사례가 적절히 표현되도록 할 수 있습니다.

또는 Swift에서 사용할 선택적 속성을 유지하고 바인딩에 사용할 비표준 유형의 계산 된 속성을 노출 할 수 있습니다.

+0

고맙습니다! ObjC 코코아 바인딩의 기원을 감안할 때 전체적으로 의미가 있습니다. 나는 2 차 대안 (계산 된 속성)을 사용했고 작동했다. –