ios - NSFetchedResultsController 和实体继承

标签 ios core-data nsfetchedresultscontroller

我的模型事件中有一个父实体。还有两个子实体:生日、周年纪念日。我正在使用核心数据中内置的实体继承功能,这样生日和周年纪念日的父对象就是 Event。

所以我使用以下方法进行提取:

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...

现在我想按事件类型、生日或周年纪念日对获取的对象进行排序。

我该怎么做?我试过:

for (Birthday *birthday in _fetchedResultsController.fetchedObjects){
    [birthdayObjects addObject:birthday]; 
}
for (Anniversary *anniversary in _fetchedResultsController.fetchedObjects){
    [anniversaryObjects addObject:anniversary]; 
}

但这只是将 fetchedObjects 中的所有对象添加到每个数组中。

有什么想法或者我是不是以错误的方式解决了这个问题?

更新:

用这个想通了:

for (Event *event in _fetchedResultsController.fetchedObjects){
    if ([event isKindOfClass:[Birthday class]]){
        [birthdayObjects addObject:event]; 
    }else{
        [anniversary addObject:event];
    }
}

但如果有更好的方法,我愿意接受!谢谢。

最佳答案

Event 上有一个只读属性,称为 eventType 或类似的,它返回一个字符串。您的 Event 类返回一个字符串,您的子事件返回 Birthday、Anniversary 以及 future 事件类型的任何其他内容。

在你的抓取结果 Controller 中,如果你使用一个,你可以将 eventType 设置为你的部分名称关键路径,这将为你将类型划分为部分 - 像这样的 transient 属性可以用于此目的,但你不能将它们用作获取请求的一部分。

在上述情况下,使用事件类型作为谓词或排序描述符来处理从获取请求返回的所有事件的数组。

如果您不喜欢字符串,可以使用枚举。如果您想在获取请求中使用事件类型,请将其作为 Event 类的属性并在 awakeFromInsert 上适当设置。

关于ios - NSFetchedResultsController 和实体继承,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9620954/

相关文章:

iphone - 调用 Superview 的 UILongPressGestureRecognizer 而不是 Subview

ios - 适用于 iOS 的 Ionic 构建 - ionic-native/core 版本问题

ios - 我如何获取在 NSManagedObjectContext 中获取的模型对象的快照,以便在释放上下文后它们可用?

objective-c - 以编程方式向 Cocoa 核心数据实体添加新记录

objective-c - 组合 + andPredicateWithSubpredicates : and + orPredicateWithSubpredicates: in one predicate

ios - WKWebView 如何在显示键盘时禁用 adjustedContentInset?

ios - 我可以重写 prepare for segue 方法以便使用 UIViewController 扩展添加一些代码吗?

ios - 使用 NSDate 的核心数据排序描述符,使用 Swift 的 iOS

iphone - 奇怪的核心数据错误

objective-c - 更改托管对象属性不会触发 NSFetchedResultsController 更新 TableView