2010-08-04 2 views
0

코어 데이터에 대한 질문이 있습니다. 내 응용 프로그램을 시작할 때 NSArrayControllers에로드되는 데이터 (코어 데이터에 의해 자동 저장 됨)는 언제입니까? 나는 사용자가 그것과 상호 작용할 수 있기 전에 먼저 그것을 수정하고 싶다.핵심 데이터 : 첫 번째 작업 공간에서 엔티티가로드되는시기와 위치는 어디입니까?

구체적으로 말하자면, 나는 entitity Playlist를위한 NSArrayController를 가지고 있습니다. 사용자가 새로운 재생 목록을 추가하거나 앱과 상호 작용할 수 있기 전에 프로그래밍 방식으로 재생 목록을 수정하고 싶습니다. 내가 내 NSPersistentDocument (MyDocument.m)에 windowControllerDidLoadNib:을 시도하고 내 NSPersistendDocument와 NSArrayController에 모두 awakeFromNib하지만이 방법을 확인하면 [[myArrayController arrangedObjects] count]으로 결과가 0 (배열 컨트롤러의 내용이 비어 있음)이됩니다.

그러나 실제로 데이터가 저장되어 있으며 사용자에게 표시됩니다. 나는 언제 어디서 내가 그것을 수정할 수 있는지 모른다.

도움 주셔서 감사합니다.

답변

1

데이터가 NSArrayController에 "로드되지"않습니다. 어레이 컨트롤러는 어레이 자체가 아닙니다. 데이터를 포함하거나 저장하지 않습니다.

대신 배열 컨트롤러는 특정 데이터가 필요할 때만 특정 데이터 조각에 대해 바인딩 된 개체를 쿼리합니다. 이것은 관리 대상 개체가 특성에 액세스 할 때만 완전히 인스턴스화되는 핵심 데이터에 특히 해당됩니다. 배열 컨트롤러는 배열 유형 데이터 구조에서 다른 객체 (일반적으로 UI 요소)로 데이터를 이동합니다.

UI에 표시하기 전에 기존 저장소를 수정하려면 배열 컨트롤러 전에 데이터를 처리해야합니다 UI에 의해 사용되는 초기화되지 않습니다. NSPersistentDocument을 사용하는 경우 readFromURL:ofType:error:을 무시하면 문서를 처음 열 때 모든 개체를 가져 와서 수정할 수 있습니다. 또는 창 컨트롤러의 windowWillLoad 또는 showWindow 메쏘드를 덮어 쓸 수 있습니다.

어디서 작업하든 관계없이 수정하려는 모든 관리 대상 개체를 가져와야합니다. 이를 위해 프로그래밍 방식으로 배열 컨트롤러를 만들 수 있지만 수정해야 할 개체가 많은 경우 가져 오기 요청을 마이크로 관리가 더 쉽습니다.

+0

대단히 감사합니다. 이제는 내가 직접 수정해야하는 관리 객체를 가져와야한다는 것을 알게되었습니다. 그게 정확히 내가 알고 싶었던 것이고 지금은 나를 위해 일합니다! 감사. – Core

0

컨트롤러의 "arrangedObjects"키 패트를 관찰하고 배열 컨트롤러가 처음으로 채워 졌음을 알리는 로직을 추가해보십시오.

또 다른 가능한 방법은 관리 대상 객체의 awakeFromInsert/awakeFromFetch 메소드를 구현하는 것입니다.

관련 문제