iphone – 核心数据setReturnsDistinctResult不工作
发布时间:2020-12-15 01:42:38 所属栏目:百科 来源:网络整理
导读:所以我正在构建一个小应用程序,它使用大约25mb大小的核心数据库和4个实体.这是公交车时刻表. 在名为“停止”的一个表中,有大约1300个公共汽车站的条目,其具有属性“名称”,“id”,“经度”,“纬度”和夫妻关系.现在有许多具有相同名称属性但坐标和ID不同的站
所以我正在构建一个小应用程序,它使用大约25mb大小的核心数据库和4个实体.这是公交车时刻表.
在名为“停止”的一个表中,有大约1300个公共汽车站的条目,其具有属性“名称”,“id”,“经度”,“纬度”和夫妻关系.现在有许多具有相同名称属性但坐标和ID不同的站点.所以我想在表视图中显示所有不同的停止名称,我正在使用带有NSDictionaryResultType和setPropertiesToFetch的setReturnsDistinctResults.但是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; } 解决方法
这对你来说可能会很晚,但可能对其他人有帮助.
我有同样的问题.我发现,如果持久存储类型是NSSQLiteStoreType,则returnDistinctResults有效.但是对于NSXMLStoreType,不同的值不起作用. 我没有测试过NSBinaryStoreType和NSInMemoryStoreType的结果. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |