iphone - 核心数据排序并且不显示重复项

标签 iphone ios core-data

我对核心数据不熟悉,在查找有关排序的任何信息以及仅获取指定属性的非重复项时遇到一些困难。

我有一个位置列表,它们都有不同的地址,但有些具有相同的城市。我想获取所有城市(不包括重复城市)并按字母顺序排列。

最好的方法是拥有 2 个属性,一个用于城市,另一个用于位置详细信息。在城市属性中,它只会有一个没有重复项的城市列表,当选择一个城市时,它会获取该城市属性的所有位置详细信息?

谢谢

最佳答案

是的,最好的方法是为城市设置单独的属性。而且您不需要将您的实体构造得独一无二。您可以在提取请求中负责排序和提取唯一的内容。

NSFetchRequest *request=[[NSFetchRequest alloc] init];
[request setEntity:[NSEntityDescription entityForName:@"<your entity name>" inManagedObjectContext:context]];
[request setResultType:NSDictionaryResultType];
[request setPropertiesToFetch:[NSArray arrayWithObject:@"City"]];
request.sortDescriptors=[NSArray arrayWithObject:[NSSortDescriptor sortDescriptorWithKey:@"City" ascending:YES]];
[request setReturnsDistinctResults:YES];

注意:此请求返回一个以 City 为键的字典数组。执行 fetch 后不要忘记释放 NSFetchRequest。

编辑

当用户点击一个城市时,将其存储在某个变量(cityName)中。现在执行另一个获取请求,例如:

request.predicate=[NSPredicate predicateWithFormat:@"City = %@",cityName];

您应该对同一个实体执行此操作。这将仅获取已选择城市名称的对象。现在,您可以通过两种方式进行获取:

  1. 获取整个实体,然后使用格式显示 实体名称.位置。在这种情况下,你将得到一个 NSArray 对象

  2. 设置要获取的属性,例如:

    [request setPropertiesToFetch:[NSArray arrayWithObject:@"Location"]];
    

在第二种情况下,它返回一个 NSDictionary (不要忘记像以前一样将结果类型设置为 NSDictionaryResultType )。

关于iphone - 核心数据排序并且不显示重复项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8117367/

相关文章:

iphone - UIDatePicker 返回错误的 NSDate

ios - 检查Core Data关系中是否存在相同的对象

iphone - 你如何处理 iOS 中的 Web 服务?核心数据呢?

ios - 找不到协议(protocol)声明 NSFetchedResultsController

ios - UITableView tableView(_ :didEndDisplaying:forRowAt:) not being called

iphone - 修改 UITableView 的侧边栏?

iphone - 在 Xcode 中添加自定义框架时出错

iphone - 我需要删除导致崩溃的 IBOUTLET 连接

ios - 插页式广告立即隐藏并展开转场

ios - 我的项目在 tableViewCell 显示标签完成之前显示,CollectionViewCell 在 swit3 中显示内部标签?