2011-01-23 5 views
0

인터페이스 빌더의 arraycontroller (myArraycontroller)를 사전으로 구성된 배열 (fileDictionariesArray)에 연결하고 있습니다. 이것은 잘 작동하지만 내가 액세스하고 arraycontroller [myArrayController arrangedObjects]의 내용을 통해 열거 할 때 나는이처럼 내 arrayController에 프로그래밍 컨텐츠를 추가 할 때까지 나는 내용의 전무를 얻을 :NSArraycontroller 내용 액세스

[myArrayController addObjects:fileDictionariesArray]; 

을 내가 할 수있는 것을 수행 한 후 모든 내용을 반복하십시오. 문제는 배열 (fileDictionariesArray)이 두 번 추가되었다는 것입니다. IB 바인딩을 통해 한 번, addObject를 통해 한 번. 프로그래밍 방식으로 내용을 설정할 때까지는 arrayContoller에 액세스 할 수 없습니다. 나는 arrayController의 내용을 삭제할 수 있습니다 다음과 같이 프로그램을 다시 설정하십시오 arrayController 항목의 정확한 수를 제공

[myArrayController setContent:nil]; 
[myArrayController addObjects:fileDictionariesArray]; 

을하지만,이 작업을 수행하는 올바른 방법은 아닌 것 같아. 누구나 컨텐츠를 두 번 추가하지 않고서 arrayObjects 배열을 통해 내 arrayController에 액세스하는 방법에 대한 힌트를 누군가 주시면 감사하겠습니다.

도움 주셔서 감사합니다. 환호, Trond Kristiansen

+0

당신이 내용에 대해 아무렇지도 않게 말할 때, 언제/어디서 어떻게 검사하나요? –

+0

이전 댓글에 무슨 문제가 있습니까? 나는 [myArrayController addObjects : fileDictionariesArray]를 호출한다. 그런 다음 즉시 arrayController의 요소를 반복합니다. for (NSArray의 NSDictionary * file) {NSLog ...}. 배열의 수는 20이어야하지만 대신 21을 포함하는 첫 번째 요소가 null입니다. 이것은 awakeFromNib에 의해 초기화 된 null 또는 null arrayController에 배열을 추가 한 결과 일 수 있다고 생각하십니까? –

+0

내 대답을 삭제했기 때문에 이전 의견을 볼 수없는 것 같습니다. nib 파일에서 컨트롤러를 로딩 할 때 새 인스턴스를 생성하므로 내용 준비가 적용되지 않으므로 IB에서 선택을 취소하십시오. –

답변

0

귀하의 게시물과 귀하와 Bavarious 사이의 의견을 토대로, 나는 그의 대답을 삭제해서는 안됩니다. 그는이 코드를 어디에서 호출했는지 물어 보았습니다 (-awakeFromNib?에서). 이것은 대답하기위한 필수적인 질문입니다.

-awakeFromNib에서 이것을 호출하면 다음 질문은 "소유자의 다른 개체, 다른 컨트롤러, 문서 란 무엇입니까?"입니다.

배열 컨트롤러는 코드를 호출하기 전에 배열의 "변경 사항"을 관찰 할 시간이 없을 가능성이 있습니다. 그래서 컨텐츠를 강제로 추가하면 결과가 두 번 추가됩니다 (완료 후 어레이 컨트롤러는 컨텐츠 배열을 관찰하고 컨텐츠를 가져옵니다 ... 다시 ... 배열의 내용을 두 배로 늘렸으므로) .

즉시 시작하는 일을하는 경우 배열에서 직접 작동하는 것이 가장 좋습니다. 시동이 완료된 후에 어레이 컨트롤러에 대한 책임을 떠난다면 "잘못되었거나"더러운 것이 아닙니다.

나는 당신이하고있는 일을 추측하고 있기 때문에 더 구체적으로 이해하기 어렵습니다. 귀하의 어레이 컨트롤러가 아키텍처에 어떻게/어디에 들어 있는지, 시작시 배열에 구체적으로 무엇을하고 있는지 등에 대한보다 완벽한 설명을 포함하도록 질문을 수정하십시오.이 정보가 누락되면 너무 많은 추측이 발생합니다.

+0

올바르지 않거나 적용 할 수 없기 때문에 답변을 삭제했습니다. 준비된 내용에 따라 새 인스턴스가 어레이 컨트롤러에 추가됩니다. –

+0

Bavarious와 Joshua에게 도움을 주셔서 감사합니다. 나는 네가 나에게 말한 것을 생각하고 코드를 재정렬했다. 나는 여전히 arrayController를로드하기 위해 addObjects를 사용하지만, 이제 그 수는 정확하며 코드에서 어떤 일이 일어나고 있는지 이해할 수 있다고 생각합니다.당신의 도움을 주셔서 감사합니다. 건배, Trond –

+0

@Bavarious - 내가 생각하기에 옳은 길을 가고 있었다 - 편집하고 추구 할 수 있었다. 나는 그것 때문에 내 자신의 대답을 넣는 것을 싫어했다. :-) –

관련 문제