使用内部对象的实例变量的值对自定义对象的数组进行排序

can*_*boy 11 iphone core-data objective-c ios

(抱歉长标题)

我有一个自定义对象Person,它又有一个NSSet名为Appointment的自定义对象.因此,一个人可以有几个约会.约会的值为startTime和endTime.

这些是核心数据NSMangagedObject类.

@interface Person : NSManagedObject

@property (nonatomic, retain) NSString *personName;
@property (nonatomic, retain) NSSet *appointments;

// etc

@end


@interface Appointment : NSManagedObject

@property (nonatomic, retain) NSNumber * startSecond;
@property (nonatomic, retain) NSNumber * endSecond;

// etc

@end
Run Code Online (Sandbox Code Playgroud)

我如何获得人员名单,按照他们任命中的最早开始时间顺序排列?

Ell*_*eal 38

您可以使用排序描述符和KVC集合运算符:

NSSortDescriptor *sortDescriptor = [NSSortDescriptor sortDescriptorWithKey:@"appointments.@min.startSecond" ascending:YES];
Run Code Online (Sandbox Code Playgroud)

例如,在CoreData fetch中:

NSFetchRequest *request = [[NSFetchRequest alloc] initWithEntityName:@"Person"];

NSSortDescriptor *sortDescriptor = [NSSortDescriptor sortDescriptorWithKey:@"appointments.@min.startSecond" ascending:YES];
[request setSortDescriptors:@[sortDescriptor]];

NSError *error = nil;
NSArray *sortedResults = [context executeFetchRequest:request error:&error];
Run Code Online (Sandbox Code Playgroud)

或者只是对数组进行排序:

NSArray *people = @[...];
NSSortDescriptor *sortDescriptor = [NSSortDescriptor sortDescriptorWithKey:@"appointments.@min.startSecond" ascending:YES];

NSArray *sortedPeople = [people sortedArrayUsingDescriptors:@[sortDescriptor]];
Run Code Online (Sandbox Code Playgroud)

有关KVC收集操作员的更多信息,请参阅KVC编程指南.