我对核心数据不熟悉,在查找有关排序的任何信息以及仅获取指定属性的非重复项时遇到一些困难。
我有一个位置列表,它们都有不同的地址,但有些具有相同的城市。我想获取所有城市(不包括重复城市)并按字母顺序排列。
最好的方法是拥有 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];
您应该对同一个实体执行此操作。这将仅获取已选择城市名称的对象。现在,您可以通过两种方式进行获取:
获取整个实体,然后使用格式显示
实体名称.位置
。在这种情况下,你将得到一个 NSArray 对象设置要获取的属性,例如:
[request setPropertiesToFetch:[NSArray arrayWithObject:@"Location"]];
在第二种情况下,它返回一个 NSDictionary (不要忘记像以前一样将结果类型设置为 NSDictionaryResultType )。
关于iphone - 核心数据排序并且不显示重复项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8117367/