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

nco*_*hen 13 database sorting iphone core-data objective-c

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

NSArray *id = [[user.recipes valueForKey:@"identity"] allObjects];
NSArray *name = [[user.recipes valueForKey:@"name"] allObjects];
Run Code Online (Sandbox Code Playgroud)

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

谢谢

Bar*_*ark 40

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

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

NSArray *sortedRecipes = [[recipes allObjects] sortedArrayUsingDescriptors:sortDescriptors];
Run Code Online (Sandbox Code Playgroud)

然后,您可以从已排序的配方数组中提取属性数组,结果将按排序顺序保留:

NSArray *sortedNames = [sortedRecipes valueForKey:@"name"];
NSArray *sortedIdentities = [sortedRecipes valueForKey:@"identity"];
Run Code Online (Sandbox Code Playgroud)


Dav*_*ong 7

如果您希望它们的顺序相同,则需要在提取值之前对它们进行排序.例:

NSArray * sortedRecipes = [user.recipes sortedArrayUsingDescriptors:arrayOfSortDescriptors];
NSArray * identities = [sortedRecipes valueForKey:@"identity"];
NSArray * names = [sortedRecipes valueForKey:@"name"];
Run Code Online (Sandbox Code Playgroud)

编辑

我很抱歉.我刚刚意识到这是一个iPhone问题,并NSSet没有sortedArrayUsingDescriptors:在iPhone上.但是,解决这个问题很简单:

NSArray * recipes = [user.recipes allObjects];
NSArray * sortedRecipes = [recipes sortedArrayUsingDescriptors:arrayOfSortDescriptors];
....
Run Code Online (Sandbox Code Playgroud)