因此,我正在構建一個小應用程序,它使用具有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;
}
還沒有找到解決方案。也許這是一個錯誤,因爲name屬性中的字符串不僅使用拉丁字母:\。接着使用executeFetchRequest並過濾數組中的所有條目。 – Moze 2010-06-21 08:41:07