2010-05-14 117 views
4

因此,我正在構建一個小應用程序,它使用具有4個實體的〜25mb大小的核心數據庫。這是公交時刻表。Core data setReturnsDistinctResult not working

在一個名爲「Stop」的表中,有~1300個具有屬性「name」,「id」,「longitude」,「latitude」和夫妻關係的巴士站條目。現在有很多站點具有相同的名稱屬性,但座標和ID不同。所以我想在表格視圖中顯示所有截然不同的名稱,我使用setReturnsDistinctResults和NSDictionaryResultType和setPropertiesToFetch。但setReturnsDistinctResult不起作用,我仍然得到所有條目。

繼承人代碼:

- (NSFetchRequest *)fetchRequest { 
    if (fetchRequest == nil) { 
     fetchRequest = [[NSFetchRequest alloc] init]; 
     NSEntityDescription *entity = [NSEntityDescription entityForName:@"Stop" inManagedObjectContext:managedObjectContext]; 
     [fetchRequest setEntity:entity]; 
     NSArray *sortDescriptors = [NSArray arrayWithObject:[[[NSSortDescriptor alloc] initWithKey:@"name" ascending:YES] autorelease]]; 
     [fetchRequest setSortDescriptors:sortDescriptors]; 
     [fetchRequest setResultType:NSDictionaryResultType]; 
     [fetchRequest setPropertiesToFetch:[NSArray arrayWithObject:[[entity propertiesByName] objectForKey:@"name"]]]; 
     [fetchRequest setReturnsDistinctResults:YES]; 
     DebugLog(@"fetchRequest initialized"); 
    } 
    return fetchRequest; 
} 

///////////////////// 

- (NSFetchedResultsController *)fetchedResultsController { 
    if (self.predicateString != nil) { 
     self.predicate = [NSPredicate predicateWithFormat:@"name CONTAINS[cd] %@", self.predicateString]; 
     [self.fetchRequest setPredicate:predicate]; 
    } else { 
     self.predicate = nil; 
     [self.fetchRequest setPredicate:predicate]; 
    } 
    fetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:self.fetchRequest managedObjectContext:managedObjectContext sectionNameKeyPath:sectionNameKeyPath cacheName:nil]; 

    return fetchedResultsController; 
} 

////////////// 

- (UITableViewCell *)tableView:(UITableView *)table cellForRowAtIndexPath:(NSIndexPath *)indexPath { 

    static NSString *CellIdentifier = @"Cell"; 

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 
    if (cell == nil) { 
     cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease]; 
    } 

    cell.textLabel.text = [[fetchedResultsController objectAtIndexPath:indexPath] valueForKey:@"name"]; 

    return cell; 
} 
+0

還沒有找到解決方案。也許這是一個錯誤,因爲name屬性中的字符串不僅使用拉丁字母:\。接着使用executeFetchRequest並過濾數組中的所有條目。 – Moze 2010-06-21 08:41:07

回答

5

這可能是你遲到了,但可以幫助別人。

我有同樣的問題。我發現的是,如果持續存儲類型爲NSSQLiteStoreType returnDistinctResults起作用。但對於NSXMLStoreType不同的值不起作用。

我還沒有測試NSBinaryStoreType和NSInMemoryStoreType的結果。

+0

我測試了這個,可以證實這確實是正確的 – mdubez 2013-06-23 19:20:38