바인딩이있는 편집 가능한 nstableView는 모델에서 값을 설정하지 않습니다

StackOverflow https://stackoverflow.com/questions/409424

문제

여기 내 설정이 있습니다.

내 신청서 대의원에는 CurrentFoo라는 속성이 있습니다. CurrentFoo 속성은 현재 선택된 FOO 인스턴스로 설정됩니다. FOO 인스턴스는 각각 nsmutableArray라고 불리는 속성을 가지고 있습니다. 결과의 객체는 다양한 유형, nsnumber, nsstring 등 일 수 있습니다 ...

특정 시간에 표시되는 nstableview가있어 사용자가 CurrentFoo에서 결과 모음을 볼 수 있습니다. 또한 결과를 추가하고 삭제할 수있는 UI도 있습니다.

nstableView에는 NSARRAYCONTROLLER의 ARPEREDOBJECTS 컨트롤러 키에 바인딩되는 단일 열이 있습니다. 나는이 바인딩에 사용되는 nsValuetransformer 서브 클래스를 작성하여 결과 배열에서 발견 된 다양한 가능한 유형을 표 열에 표시하려는 문자열 표현으로 변환했습니다.

NSARRAYCONTROLLER의 컨텐츠 배열 바인딩은 nsObjectController의 선택 컨트롤러 키에 연결되며 currentFoo.Results를 모델 키 경로로 사용합니다. 마지막으로 nsobjectController는 응용 프로그램 대의원에서 컨텐츠를 가져옵니다.

이 모든 것은 NstableView에서 CurrentFoo.Results를 추가하고, 제거하고, 표시하는 것만으로도 훌륭하게 작동합니다.

내 문제는 테이블보기의 내용을 편집하려고 할 때입니다. NSValueTransformer 서브 클래스를 리버스 변환을 허용하도록 설정하고 ReversetRansformedValue를 구현했습니다. 코드를 스텝핑하면 NstableView 행에서 값을 편집 할 때 값 변압기의 해당 메소드로 올바르게 전송되고 변환되고 반환된다는 것을 보여줍니다.

그런 다음 오류는 바인딩이 리버스 변환 된 값으로 모델을 업데이트 할 때 발생합니다.

코코아 바인딩 : 오브젝트 0의 키 경로에 대한 오류 설정 값 (bound Object (null)) : [setValue : orundefinedKey :] :이 클래스는 키에 대한 키 값 코딩 호환이 아닙니다.

따라서 기본적 으로이 배열이 테이블보기에 바인딩되며 사용자가 행을 편집 할 때 문자열을 적절한 객체로 다시 변환하려고합니다. 코코아 바인딩은이 오류를 제공하여 NSTABLECOLUMN 바인딩의 주요 경로에 무언가를 설정해야한다고 믿지만 무엇을 확실하지 않습니다. 나는 "자기"를 시도했지만 그것은 효과가 없었습니다.

모든 도움이 감사합니다.

도움이 되었습니까?

해결책

모델 키는 비어있을 수 없으므로 오류 메시지가 표시됩니다.

결과 객체를 원시 객체 (문자열, 박스 숫자 등)에서 모델 객체 (클래스 fooresult)로 변경하고 바인딩의 모델 키 경로를 테이블보기가있는 모델 객체의 속성 이름으로 설정하십시오. 돌연변이.

기본적으로 원시 객체의 배열에 직접 바인딩 할 수 없습니다. 모델 객체 배열의 일부 속성에 바인딩해야합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top