2010-12-27 4 views
4

코어 데이터 관리 객체 컨텍스트에 새 객체를 삽입하고 그 직후 NSArrayController에서 새 객체를 찾으려고하면 (바인딩을 통해 managedObjectContext와 연결됩니다.), 나는 그것을 발견 할 수 없다. 나는 하나의 방법으로 창조와 탐색을한다.새 코어 데이터 객체가 NSArrayController 배열 객체에 나타나지 않습니다.

지금 내 질문. NSArrayControllers 배열 된 배열에 새로운 삽입 된 개체가 표시되는 데 시간이 얼마나 걸립니까?

업데이트 : 여기 는 새로운 객체

그것은 "시간"하지만, "어느 시점에서"의 문제가 아니다
NSEntityDescription *entity = [[[self managedObjectModel] entitiesByName] objectForKey:@"EntityName"]; 
NSManagedObject *object = [[NSManagedObject alloc] initWithEntity:entity insertIntoManagedObjectContext:[self managedObjectContext]]; 
... 
[[self managedObjectContext] processPendingChanges]; 

[arrayController fetch:nil]; 
NSArray* objects = [arrayController arrangedObjects]; //the new object is not present in the array 

답변

0

방금 ​​문제가 발견되었습니다. 개체를 선택하려면 setSelectedObjects: 메서드 NSArrayController을 사용합니다. 왜 내가이 방법을 사용하지 않았는지 모르겠다!

+0

나는 NSArrayController에서 -fetch :를 호출하는 요구 사항을 놓친 것과 비슷한 문제가있다.나는 -setSelectedObjects :이 작업을 부작용으로 생각하지만 벨트 및 브레이스의 경우 컨트롤러에 두 방법을 모두 전송하기로 결정했습니다. 후자는 약간의 해킹과 더 나은 접근 인 것처럼 느껴지지만 문제의 관리 대상 객체에 대한 편집기 시트의 바인딩이 새 항목 추가 여부 또는 이전 항목 편집 여부와 상관없이 유용하게 사용할 수 있습니다. 존재할 수 있습니다. –

+0

개체가 arrayController?의 내용 배열에없는 경우 "setSelectedObjects"가 어떻게 도움을 주거나 작동합니까? –

3

를 삽입하고 가져 오는 코드입니다. 그것을 연구하는 것이 중요하다는 점을 충분히 구분할 수 있습니다. :-)

보통 어레이 컨트롤러는 다음 실행 루프에서 자동으로 업데이트되지만 (이 경우 해당 내용을 다시 가져옵니다) 기술적으로는 "향후의 실행 루프에서"입니다. 무언가를 삽입 한 후 즉시 업데이트하려면 MOC를 -processPendingChanges으로 보내고 어레이 컨트롤러에 -fetch:을 요청하십시오.

Core Data documentation에서 읽은 첫 번째 사항은 고급 코코아 주제이며 키 필수 바인딩 및 주요 값 관찰이 사전 지식에 포함되어 있다는 것입니다. KVC/KVO (및 Cocoa Bindings 계층)에 대한 이해에서이 질문에 이르는 지식이 누락되었습니다.

+0

processPendingChanges 메서드 호출이 작동하지 않았습니다. KVC/KVO 문서를 읽을 것입니다. 아마도이 문제를 이해하는 데 도움이 될 것입니다. Thx – brutella

+0

삽입 만 "완료"(종종 필요는 없지만 상처받지 않음). -fetch에 대한 호출은 중요합니다. 그거 했니? 또한 MOC가 하나 뿐인 것으로 가정합니다. * 호출 * 가져 오기 : 코드를 게시해야 할 수도 있습니다 (삽입 +이 강제 배열 컨트롤러 가져 오기). –

+0

원본 게시물에 코드 스 니펫을 추가했습니다. – brutella

관련 문제