2014-01-20 5 views
2

NSFetchedResultsController의 데이터로 UITableView를 사용하여 앱을 작성하려고합니다. 문제는 - 다른 모델의 일부 추가 데이터를 테이블보기로 표시해야합니다.다른 모델의 데이터가있는 NSFetchedResultsController

학생과 그룹 (나는 관계가 분명하다고 생각합니다. 그룹은 많은 학생으로 구성되며 학생은 한 그룹으로 만 구성 될 수 있습니다). 그룹 목록으로 UITableView를 빌드하려고합니다. 나는 또한 각 그룹의 학생 수를 원합니다.

(NSFetchedResultsController *) fetchController { 
    if (!_fetchController) { 
    NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init]; 
    NSEntityDescription *entity = [NSEntityDescription entityForName:@"GroupModel" inManagedObjectContext:[NSManagedObjectContext MR_defaultContext]]; 
    [fetchRequest setEntity:entity]; 

    NSPredicate *messageInChatPredicate = [GroupModel getMyChatsPredicate]; 
    [fetchRequest setPredicate:messageInChatPredicate]; 

    NSSortDescriptor *sort = [[NSSortDescriptor alloc] initWithKey:@"name" ascending:YES]; 
    [fetchRequest setSortDescriptors:[NSArray arrayWithObject:sort]]; 

    _fetchController = [[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest managedObjectContext:[NSManagedObjectContext MR_defaultContext] sectionNameKeyPath:nil cacheName:@"main"]; 
    _fetchController.delegate = self; 
    } 

    return _fetchController; 
} 

추가 정보 (예 : 각 그룹의 학생 수)를 어떻게 추가 할 수 있습니까?

답변

1

엔티티 group에서 값을 얻으려면 group.students.count을 사용하지 않는 이유는 무엇입니까? 당신은 하나의 fetchedResultsController 만 필요로하고 코어 데이터 퍼포먼스가 괜찮은 것 같아요.

용어가 약간 혼란 스럽습니다. 대개 모델은 Xcode에서 생성 된 핵심 데이터 모델이며 여러 엔터티를 포함합니다. 그룹, 학생. 때로는 두 개의 서로 다른 모델 및/또는 서로 다른 버전의 모델을 사용할 수 있습니다.

개체는 일반적으로 엔터티로 알려져 있으며 둘 모두 동일한 코어 데이터 모델에 속합니다.

편집 : 는 genderStudent의 속성이 있음을 물론 가정

NSMutableArray *boys = [[NSMutableArray alloc] init]; 
[NSPredicate predicateWithFormat:@"gender = %@",@"MALE"]; 
[boys addObjectsFromArray:[group.students filteredArrayUsingPredicate:predicate]]; 
NSLog(@" boys count is %d", boys.count); 

다음과 같은 당신이 할 수있는 소녀 또는 소년 같은 하위 그룹의 수를 얻을 수 있습니다.

+0

group.students를 가져 오는 방법에 대한 샘플 코드를 제공 할 수 있습니까? .그룹 개체와 함께 계산합니까? 나는 당신의 충고가 실제로 필요한 것이라고 생각하지만 현재 요청에 대한 추가 정보를 얻을 수는 없습니다. – user2786037

+0

그룹을 가져온 다음 group.students.count를 사용하여 개수를 가져옵니다. –

+0

미안하지만, 내 아이폰에서 그렇게! 기존 GroupModel fetchedResultsController가 제대로 작동하고 원하는 학생 그룹을 반환한다고 가정하고 핵심 데이터 관계를 올바르게 설정했다고 가정합니다. 그런 다음 configureCell 메소드의 각 그룹에있는 학생의 수를 표시하려면'[NSString stringWithFormat : @ "% @ (% d)", group.groupName, group.students.count); ' 이 설명에 표기가 누락 된 경우 문제에 대해 좀 더 구체적으로 설명해야합니다. –

-1

기본적으로 두 그룹의 학생 수와 같은 추가 정보를 얻을 수 있습니다.

첫 번째 옵션은 그룹 - 학생 관계에서 학생들을 계산하는 것입니다. 이 요청을 제공하기 위해 NSManagedObjectContext는 적절한 결과를 얻기 위해 모든 학생을 메모리에로드합니다. 개인적으로, 나는이 옵션을 정말로 좋아하지 않는다.

두 번째 옵션은 그룹에 속한 학생의 수를 그룹의 속성에 저장하여 직접 추가 할 수 있도록하는 것입니다. 예, 올바른 번호를 수동으로 유지해야합니다. 로드해야하는 데이터의 양에 따라이 방법이 더 바람직합니다. 결정적으로 fas이기 때문에

+0

그룹 모델에 "캐싱"속성을 추가하는 것이 좋습니다. 그러나 IMO는 초기 최적화이므로 코드가 많이 필요합니다. – user2786037

+0

나는 왜 이것이 나쁜 생각인지 설명하기 위해 나의 대답을 확장 할 것이다 : 학생 엔티티의 모든 수정은 부모 엔티티를 갱신해야한다. – user2786037

+0

많은 코드가 필요하지 않습니다. 아마도 5 줄입니다! –

1

다른 모델 (예 : 학생)을 담당하는 다른 NSFetchedResultsController를 만듭니다.

+0

NSFetchedResultsChangeMove 중 하나에서 다른 사람 등에서 행을 이동해야하는 경우 동기화에 많은 문제가있을 것입니다. – user2786037

관련 문제