获取核心数据对象的子对象的属性?

Posted

技术标签:

【中文标题】获取核心数据对象的子对象的属性?【英文标题】:Getting at a Core Data object's sub-object's properties? 【发布时间】:2010-11-19 11:35:46 【问题描述】:

我有一个名为 Workshop 的 Core Data 对象。它与 Student 对象具有一对多的关系。

如何从 Workshop 对象中获取学生姓氏的 NSArray(姓氏是学生的 NSString 属性)?最好按字母顺序?

【问题讨论】:

【参考方案1】:

警告:未经测试的代码传入

假设您的 Workshop 和 Student 实体都具有“名称”属性,并且您的学生实体具有称为“Workshop”的关系,这就是您获取对象的方式:

- (NSArray*) getStudentsForWorkshop:(NSString*) workshopName 
    NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];   
    NSEntityDescription *entity = [NSEntityDescription entityForName:@"Student" 
                                          inManagedObjectContext:managedObjectContext];
    NSPredicate *predicate = [NSPredicate predicateWithFormat:@"Workshop.name LIKE %@", workshopName];
    [fetchRequest setPredicate:predicate];
    [fetchRequest setEntity:entity];                                         

    NSArray *result = [managedObjectContext executeFetchRequest:fetchRequest error:nil]];

    NSArray *sortedArray = [NSArray arrayWithArray: [result sortedArrayUsingSelector:@selector(compareStudent:)]];
    return sortedArray;      

对于排序,您可以像这样实现compareStudent

- (NSComparisonResult)compareStudent:(NSManagedObject*)otherObject 
    return [self.name compare:otherObject];

【讨论】:

以上是关于获取核心数据对象的子对象的属性?的主要内容,如果未能解决你的问题,请参考以下文章

在获取永久 ID 后,核心数据无法为对象完成故障

通过布尔属性获取核心数据对象

使用特定对象而不是对象属性获取核心数据

通过对象的枚举属性使用 NSPredicate 获取核心数据托管对象的问题

核心数据:从多个 ManagedObjectContexts 中获取对象

NSPredicate 获取具有 NSDate 日期范围内的日期属性的核心数据对象