对核心数据实体的NSSets进行排序 - Objective-c

时间:2010-03-11 17:20:20

标签: iphone objective-c database sorting core-data

我想对核心数据NSSet的数据进行排序(我知道我们只能用数组做,但让我解释一下......)。我有一个实体用户与实体配方有很多关系。配方具有属性名称和ID。 我想获得这样的数据:

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

如果我在两个数组中的索引1处获取对象,它们对应于相同的配方......

由于

2 个答案:

答案 0 :(得分: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"];

答案 1 :(得分: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];
....