2014-01-20 53 views
2

我試圖用NSFetchedResultsController的數據與UITableView構建應用程序。問題是 - 我需要在表格視圖中顯示來自其他模型的其他數據。NSFetchedResultsController與來自其他模型的數據

假設我有2個模型:學生和團體(我認爲關係很明顯:團體由許多學生組成,學生只能在一個團體中)。我試圖用組列表構建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.students.countgroup實體中獲取值?你只需要一個fetchedResultsController,我想你會發現Core Data的性能很好。

您的術語有點混亂,通常一個模型是在Xcode中創建的核心數據模型,並且有一些實體,例如組,學生。有時你可以使用兩種不同的模型和/或不同版本的模型。

您的對象通常被稱爲實體,並且兩者都屬於同一個核心數據模型。

編輯: 要獲得亞羣,如女孩或男孩,你可以做的次數以下

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

假設當然是genderStudent屬性。

+0

您能否提供示例代碼如何獲取group.students 。與羣組對象一起計數?我認爲你的建議是我真正需要的,但我無法獲得有關我當前請求的其他信息。 – user2786037

+0

只需獲取該組,然後使用group.students.count來獲取計數。 –

+0

對不起,從我的iPhone上做到這一點!我假設你現有的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

相關問題