我的模型事件中有一个父实体。还有两个子实体:生日、周年纪念日。我正在使用核心数据中内置的实体继承功能,以便生日和周年纪念日的父对象是事件。
所以我使用以下命令进行获取:
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
NSEntityDescription *entity = [NSEntityDescription entityForName:@"Event" inManagedObjectContext:self.managedObjectContext];
[fetchRequest setEntity:entity];
// Set the batch size to a suitable number.
[fetchRequest setFetchBatchSize:20];
// Edit the sort key as appropriate.
NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"start_date" ascending:YES];
NSArray *sortDescriptors = [NSArray arrayWithObjects:sortDescriptor, nil];
etc...
现在我想按事件类型、生日或周年纪念日对 fetchedObjects 进行排序。
我怎么做?我试过:
for (Birthday *birthday in _fetchedResultsController.fetchedObjects){
[birthdayObjects addObject:birthday];
}
for (Anniversary *anniversary in _fetchedResultsController.fetchedObjects){
[anniversaryObjects addObject:anniversary];
}
但这只是将 fetchedObjects 中的所有对象添加到每个数组中。
有什么想法或者我是否以错误的方式处理这个问题?
UPDATE:
用这个想出来了:
for (Event *event in _fetchedResultsController.fetchedObjects){
if ([event isKindOfClass:[Birthday class]]){
[birthdayObjects addObject:event];
}else{
[anniversary addObject:event];
}
}
但如果有更好的方法我愿意!谢谢。
具有只读属性Event
,称为eventType
或类似的,它返回一个字符串。您的事件类返回一个字符串,您的子事件返回生日、周年纪念日以及未来事件类型的其他内容。
在您的获取结果控制器中,如果您使用一个,您可以将 eventType 设置为您的部分名称键路径,这将为您将类型划分为部分 - 像这样的瞬态属性适合此目的,但您不能将它们用作获取请求的一部分。
在上面的情况下,使用事件类型作为谓词或排序描述符来处理从获取请求返回的所有事件的数组。
如果您不喜欢字符串,可以使用枚举。如果要在获取请求中使用事件类型,请将其作为 Event 类的属性并在 awakeFromInsert 上进行适当设置。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)