2010-05-11 3 views
5

코어 데이터를 알기 위해 노력하고 있습니다. (아이폰 개발에 대한 멍청한 생각입니다.) 그리고 이것을하기 위해서 나는 fetchedresultscontroller와 NSlog로부터 객체를 얻으려고합니다. 객체의 속성입니다. .핵심 데이터 fetchedresultscontroller 질문 : "섹션"이란 무엇입니까?

NSArray *ar = [NSArray arrayWithArray:[fetchedResultsController sections]]; 
Task *t = [ar objectAtIndex:0]; 
NSLog(@"%@", t.taskName); 

그러나, 응용 프로그램이 오류로 추락 : :이처럼하려고 노력 응용 프로그램 충돌 오류와 내가 있기 때문에 당신이 가져온 재산 개체를 사용할 필요가 있음을 배웠습니다

Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '*** -[_NSDefaultSectionInfo taskName]: unrecognized selector sent to instance 0x3d1f670'

이것을 위해서, 그렇다면 섹션은 무엇입니까? 어떤 도움을 주셔서 감사합니다. 미안합니다. 이것이 정말 바보 같은 질문이라면. 나는 문서를 조사했지만 여전히 이해하지 못한다.

답변

27

NSFetchedResultsController은 지정한 키를 기반으로 개체를 섹션으로 그룹화 할 수 있습니다. 예를 들어 엔티티에 category 속성이있는 경우 개체를 category으로 그룹화하고 해당 범주의 제목 아래에 개체를 표시 할 수 있습니다.

모든 UITableView (및 모든 NSFetchedResultsController)에는 적어도 하나의 섹션이 포함되어 있으므로이 기능을 사용하지 않아도 섹션을 처리해야합니다. check the documentation 인 경우 sections 속성의 개체가 NSFetchedResultsSectionInfo 프로토콜을 따르는 것을 볼 수 있습니다.이 개체는 해당 섹션의 개체가 포함 된 objects 속성을가집니다.

id <NSFetchedResultsSectionInfo> sectionInfo = [fetchedResultsController.sections objectAtIndex:0]; 
Task *task = [sectionInfo.objects objectAtIndex:0]; 

훨씬 간단한, 기타, 그리고 선호하는 방법은 objectAtIndexPath: 방법을 사용하는 것입니다

NSFetchedResultsController에서 실제 객체를 얻을 수있는 두 가지 방법이 있습니다.

Task *task = [fetchedResultsController objectAtIndexPath:[NSIndexPath indexPathForRow:0 inSection:0]]; 

이 두 샘플은 동일합니다. UIKit adds some methods to NSIndexPath을 사용하면 테이블 뷰 및 결과 컨트롤러를 쉽게 가져올 수 있습니다. 또한 UITableViewDataSourceUITableViewDelegate 메서드는 모두 NSIndexPath 개체를 제공하므로이 셀에 대해 올바른 개체를 얻으려면 일반적으로 objectAtIndexPath:에 전달하면됩니다.

Apple은 iPhone Core Data 사용시 decent tutorial도 제공합니다. 그것은 많은 질문에 답할 것입니다. 안타깝게도 깊이는 NSFetchedResultsController이 아닙니다.

+1

와우, 정말 고마워요. 훌륭한 정보입니다. – Jake

관련 문제