사용자 기본 설정을 나타내고 NSString
및 NSNumber
을 캡슐화하는 간단한 모델 Foo
이 있습니다. 나는 Foo
배열을 사용자 기본값으로 저장하여 응용 프로그램 시작 사이에 지속되도록하고 싶습니다. 사용자가 추가, 제거 및 편집 할 수 있도록 테이블보기로 표시하고 싶습니다. 이 문제에 대한 해결책은 바인딩과 관련하여 매우 단순 해 보였지만 실제 작업을 수행하는 것은 불가능하다는 사실이 입증되었습니다.NSUserDefaultsController에 바인딩 된 NSArrayController에 바인딩 된 편집 가능한 테이블 뷰
내 응용 프로그램이 시작되면 NSUserDefaults
에 초기 Foo
배열의 키가있는 아카이브로 등록합니다. 내 XIB에서 콘텐츠 배열이 공유 사용자 기본값 컨트롤러의 values
컨트롤러 키에 바인딩 된 배열 컨트롤러가 있습니다. 키 경로는 foos
입니다. '복합 값으로 내용 처리'가 선택되었습니다. 값 변환기로 NSKeyedUnarchiveFromData
입니다. 그러면 테이블보기가 배열 컨트롤러 및 테이블 열에서 Foo
의 속성으로 바운드됩니다.
Foo
이 배열에서 추가 및 제거 될 때 완벽하게 작동합니다. 사용자 기본값의 foos
키가 배열의 새로운 내용을 반영하도록 업데이트됩니다. 문제는 개별 Foo
의 속성을 변경해도 사용자 기본값으로 다시 기록되도록 배열을 트리거하지 않는다는 것입니다. 그 이유는 Key-Value Observing Programming Guide의 'Dependent Keys를 등록하는 것'의 'To-many Relationships'섹션에서 논의 될 것이라고 생각합니다. 배열 컨트롤러의 배열 자체에 대한 변경 사항은 관찰되지만 포함 된 요소의 속성에 대한 변경 사항은 없습니다. .
나는이 일을하기 위해 실제로 무엇을해야 할지를 이해할 수없는 문제로 이것을 인식하고 있음에도 불구하고. Foo
의 변경 사항을 관찰 할 때 전체 어레이가 사용자 기본값 인 NSUserDefaults
, NSUserDefaultsController
, NSArrayController
에 다시 쓰여지도록 어떤 개체에 알리고 어떤 메시지를 보내야합니까? Apple 문서에이 문제에 대한 간단한 언급이 있었으면하고 실제 문제를 해결하기위한 예제 코드를 제공했으면합니다. 모든 것을 시도했지만 마법의 주문을 찾을 수 없습니다.
이것은 How to get notified of changes to models via an NSArrayController과 비슷하지만 사용자 정의보기와 bind:toObject:withKeyPath:options:
의 사용 사이에서 개념적 도약을 할 수 없습니다.
감사합니다. :)
이것은 실제로 NSUserDefaults가 아닌 CoreData의 작업처럼 들립니다. –
당신은 정교 할 수 있습니까? CoreData로 이것을 구현하기 시작하기 위해 소화해야 할 문서의 양에 대해서 생각해 보면 두통이 듭니다. 데이터 모델의 관점에서 볼 때, 내가하려는 것은 매우 직설적 인 것처럼 보입니다. CoreData의 복잡성 때문에 과장된 것처럼 보입니다. –
잘 사용자 디폴트는 설정을위한 것이고 그것을 사용하여 데이터 모델을 사운드로 저장하려고합니다. CoreData는 실제로 간단한 데이터 모델을 가지고 있다면 그리 어렵지 않습니다. xcode에는 기본적으로 모든 설정을 수행하는 프로젝트 템플릿이 있습니다. 당신이 설명하는 문제도 해결해야합니다. –