根据核心数据中的属性对实体中的行进行排序

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];

【讨论】:

以上是关于根据核心数据中的属性对实体中的行进行排序的主要内容,如果未能解决你的问题,请参考以下文章

根据一对多关系中的属性对 NSFetchRequest 进行排序?

根据包含数字和不包含数字的行对 CSV 中的行进行排序

在表格视图部分中对核心数据对象进行排序

核心数据。无法根据与继承实体的关系来获取/排序实体

如何在C语言中通过查看行中的一个属性对文件的行进行排序?

根据关系属性对获取请求进行排序