根据核心数据中的属性对实体中的行进行排序
Posted
技术标签:
【中文标题】根据核心数据中的属性对实体中的行进行排序【英文标题】:Sorting rows in entity based on attribute in core data 【发布时间】:2015-03-20 11:36:49 【问题描述】:我的核心数据实体有问题。它具有与此表类似的三个属性
Name value details
cat xxx 01
apple YYY 10
ball ZZZ 11
我需要根据属性“名称”对表格进行排序,使实体看起来像这样
Name value details
apple YYY 10
ball ZZZ 11
cat xxx 01
使用以下代码仅对“名称”属性值进行排序,但我需要对整行进行排序。
NSFetchRequest *fetchRequest1 = [NSFetchRequest fetchRequestWithEntityName:@"UserData"];
fetchRequest1.resultType = NSDictionaryResultType;
[fetchRequest1 setPropertiesToFetch:[NSArray arrayWithObjects:@"userName", nil]];
fetchRequest1.returnsDistinctResults = YES;
NSArray *dictionaries1 = [self.managedObjectContext executeFetchRequest:fetchRequest1 error:nil];
NSSortDescriptor *sort = [NSSortDescriptor sortDescriptorWithKey:@"userName" ascending:YES selector:@selector(caseInsensitiveCompare:)];
NSArray* sortedArray=[dictionaries1 sortedArrayUsingDescriptors:@[sort]];
有没有办法对整行进行排序并保存实体?
【问题讨论】:
嘿?具有 name、value 和 details 属性的对象是什么。 用户名、用户值和用户详细信息 SQL 等核心数据。如果要存储有关用户的信息,请创建一个名为 User 的 SINGLE 核心数据对象(就像 SQL 中的表),它具有 3 个属性。尝试查看核心数据教程以更好地理解它。 【参考方案1】:您已指定NSDictionaryResultType
,因此提取仅返回您指定的一个属性 - username
。要获取完整的对象及其所有属性,请删除这些行。你也不需要returnsDistinctResults
。而且您还不如让 fetch 进行排序,而不是事后对数组进行排序:
NSFetchRequest *fetchRequest1 = [NSFetchRequest fetchRequestWithEntityName:@"UserData"];
NSSortDescriptor *sort = [NSSortDescriptor sortDescriptorWithKey:@"userName" ascending:YES selector:@selector(caseInsensitiveCompare:)];
fetchRequest1.sortDescriptors = @[sort];
NSArray *sortedResults = [self.managedObjectContext executeFetchRequest:fetchRequest1 error:nil];
【讨论】:
以上是关于根据核心数据中的属性对实体中的行进行排序的主要内容,如果未能解决你的问题,请参考以下文章