对Core Data实体的NSSet进行排序 - Objective-C

13

我想对一个核心数据NSSet的数据进行排序(我知道只能用数组实现,但让我解释一下...)。我有一个名为user的实体,它与实体recipe具有一对多的关系。一个recipe有属性名和id。 我想以这样的方式获取数据:

NSArray *id = [[user.recipes valueForKey:@"identity"] allObjects];
NSArray *name = [[user.recipes valueForKey:@"name"] allObjects];

如果我在两个数组中取索引为1的对象,它们对应的是同一个食谱...

谢谢

2个回答

40

你需要先对食谱进行排序:

NSArray *sortDescriptors = [NSArray arrayWithObject:[NSSortDescriptor sortDescriptorWithKey:@"name" ascending:YES]];

NSArray *sortedRecipes = [[recipes allObjects] sortedArrayUsingDescriptors:sortDescriptors];

然后,您可以从已排序的食谱数组中提取一系列属性,并且结果将保持排序顺序:

NSArray *sortedNames = [sortedRecipes valueForKey:@"name"];
NSArray *sortedIdentities = [sortedRecipes valueForKey:@"identity"];

谢谢,这个方法很有效... 我只是将描述符中的 @"name" 改为了 @"id",在 iPhone 上没有创建描述符的实例方法,所以我将方法 sortDescriptorWithKey 更改为 initWithKey 并释放它! - Nate

7

如果您希望它们按照相同的顺序排列,那么在提取值之前需要对它们进行排序。示例:

NSArray * sortedRecipes = [user.recipes sortedArrayUsingDescriptors:arrayOfSortDescriptors];
NSArray * identities = [sortedRecipes valueForKey:@"identity"];
NSArray * names = [sortedRecipes valueForKey:@"name"];

编辑

抱歉,我刚意识到这是一个iPhone的问题,而NSSet在iPhone上没有sortedArrayUsingDescriptors:。不过,可以很容易地解决:

NSArray * recipes = [user.recipes allObjects];
NSArray * sortedRecipes = [recipes sortedArrayUsingDescriptors:arrayOfSortDescriptors];
....

1
问题在于user.recipes是一个NSSet……所以无法工作!那么我应该如何对arrayOfSortDescriptors进行排序呢?谢谢 - Nate

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接