0

我在查詢核心數據以查找一羣人中的「最舊」和「最高」。對於較大的數據集,這通常起作用(因爲重複匹配的機會較少),但是對於一個小數據集,其中最老的人可能也是最大的我有問題。通過NSFetchedResultsController在UITableView中顯示重複的單元格?

[John, 77, 160] 
[Pete, 56, 155] 
[Jane, 19, 130] 
[Fred, 27, 159] 
[Jill, 32, 128] 

,因爲我想先運行2 NSFetchRequests顯示在2 UITableViewCellUITableView我在做這個該信息(一個找老大,老二找到最重的),我把他們帶到了objectID s,然後將它們添加到我用來設置我的NSFetchedResultsController的最後一個NSFetchRequest

// FETCH REQUEST - OLDEST, HEAVIEST 
NSFetchRequest *fetchRequest = [NSFetchRequest fetchRequestWithEntityName:@"People"]; 
NSSortDescriptor *descriptor = [NSSortDescriptor sortDescriptorWithKey:@"age" ascending:YES]; 
[fetchRequest setSortDescriptors:[NSArray arrayWithObject:descriptor]]; 
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SELF IN %@", IDArray]; 
[fetchRequest setPredicate:predicate]; 

如果我在最後的NSFetchRequest的「打印說明」中確實包含2個指向managedObjects的指針。

(i.e. [John, 77, 160] [John, 77, 160]) 

我的問題似乎是,當我做

[[self fetchedResultsController] performFetch:nil]; 

UITableView委託方法:

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { 
    NSArray *sectionArray = [[self fetchedResultsController] sections]; 
    id <NSFetchedResultsSectionInfo> sectionInfo = [sectionArray objectAtIndex:0]; 
    NSUInteger numberOfRows = [sectionInfo numberOfObjects]; 
    NSLog(@"ROWS: %u", numberOfRows); 
    return numberOfRows; 
} 

只顯示numberOfRows爲1,只顯示一個[約翰,77 ,160]在我的UITableView

+0

獲取請求不會返回重複的對象。它返回與謂詞相匹配的所有對象 - 而這恰好就是您的案例中的一個對象。爲什麼你需要一個獲取結果控制器?如果您已有2個對象,請將它們放入數組中並使用普通表視圖顯示。 – 2013-03-20 12:18:14

+0

嗨馬丁,這是一個很好的觀點,有問題的ViewController從一個簡單的列表和一個提取的結果控制器開始,當我添加額外的搜索和排序時,我一直使用現有的提取結果控制器。直到現在(測試5人而不是500人)我沒有注意到任何問題,我也不知道提取請求不會返回重複的對象。我會考慮改變代碼來使用你所建議的數組。謝謝,非常感謝。 – fuzzygoat 2013-03-20 12:25:06

回答

1

獲取請求不會返回重複的對象。它返回與謂詞匹配的所有對象。因此,

[NSPredicate predicateWithFormat: @"objectID = %@", oid] 
[NSPredicate predicateWithFormat: @"(objectID = %@) OR (objectID = %@)", oid, oid] 
[NSPredicate predicateWithFormat: @"objectID IN %@", @[oid, oid]] 

返回所有具有給定對象ID(如果有)的對象。

就你而言,你已經有了你想要顯示的對象。因此,我建議將它們存儲在一個數組中,並將其用作表視圖數據源,而不是使用抓取的結果控制器。

+0

再次感謝馬丁。 – fuzzygoat 2013-03-20 12:39:48