2012-11-29 2 views
4

나는 coredata를 사용하는 작은 응용 프로그램을 작성 중이므로 수식, 과학 및 기타 책이 들어있는 데이터가 있습니다.섹션이있는 FetchedResultsController

다른 책을 추가하거나 삭제할 수 있지만 수학과 과학을 삭제할 수 없으며 새로운 학생이 추가되면 기본적으로 추가됩니다. 결과를 가져올 때 수학과 과학을 포함한 모든 책 이름을 가져야합니다.

내가 원하는 것은 수학, 과학 및 기타와 같은 헤더가있는 세 섹션으로 데이터를 표시하는 것입니다. 수학과 과학에는 수학이나 과학이라는 행이 하나만 포함됩니다. 다른 모든 책은 독서 섹션에 있어야합니다.

어떻게 이것을 진행 하시겠습니까?

+0

이것은 섹션 이름 키 패스가 작동하는 곳입니다. 과학, 수학 및 다른 것들을 보유하고있는 과목이라는 속성이 있다면 fetchedresultscontroller performFetch : method sectionNameKeyPath :를 주제로 사용하고 다른 모든 속성은 apple 템플리트에서 제공하는 것과 동일하게 amost가됩니다. – Sandeep

답변

4

NSFetchResultsController를 만들 때 가져 오기 요청에서 books 테이블의 엔티티 이름을 사용하십시오.

NSFetchedResultsController *aController = [[NSFetchedResultsController alloc] initWithFetchRequest:request managedObjectContext:self.managedObjectContext sectionNameKeyPath:@"typePropertyName" cacheName:nil]; 

typePropertyName 그것이 될 것 섹션의 이름으로 책에서 얻을 수있는 경로가 될 것입니다

그런 다음이를 사용하여 ....

그냥있을 수 @ "유형 이름" 북 테이블에 직접 가지고 있거나 type이라는 테이블에 대한 관계가 있고 그 테이블에 name이라는 필드가 있다면 @ "type.name"이 될 수 있습니다. 에 ...

전체 코드

#pragma mark - fetched results controller 

- (NSFetchedResultsController*)fetchedResultsController 
{ 
    if (_fetchedResultsController != nil) { 
     return _fetchedResultsController; 
    } 

    NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:@"Book"]; 
    [request setFetchBatchSize:20]; 

    NSSortDescriptor *sdType = [[NSSortDescriptor alloc] initWithKey:@"type.name" ascending:YES]; 
    NSSortDescriptor *sdName = [[NSSortDescriptor alloc] initWithKey:@"name" ascending:YES]; 
    [request setSortDescriptors:@[sdType, sdName]]; 

    NSFetchedResultsController *aController = [[NSFetchedResultsController alloc] initWithFetchRequest:request managedObjectContext:self.managedObjectContext sectionNameKeyPath:@"type.name" cacheName:nil]; 

    aController.delegate = self; 
    self.fetchedResultsController = aController; 

    NSError *error = nil; 
    if (![self.fetchedResultsController performFetch:&error]) { 
     NSLog(@"Unresolved error %@, %@", error, [error userInfo]); 
     abort(); 
    } 
    return _fetchedResultsController; 
} 

는 그 다음 tableViewController에서 당신이 할 수 있습니다 ... 같은 것입니다 ...

섹션으로 NSFetchedResultsController를 만듭니다 어쨌든

,

- (NSString*)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section 
{ 
    id <NSFetchedResultsSectionInfo> sectionInfo = [self.fetchedResultsController sections][section]; 

    return [sectionInfo name] 
} 

그러면 섹션 이름이 각 섹션의 헤더로 사용됩니다.

+0

답장을 보내 주셔서 감사합니다.하지만 해당 엔티티에는 섹션을 분류 할 속성이 없습니다. 범주는 배열과 같습니다. 주제 이름이 수학 일 경우 주제 이름이 과학 일 경우 수학 섹션에, 그 다음에는 과학 섹션으로 이동해야합니다. 그렇지 않으면 다른 주제에 속해야합니다. – Ayan

+0

다음 필드 이름을 사용하여 : D – Fogmeister

관련 문제