Iphone NSFETCH请求父级的所有子级

Iphone NSFETCH请求父级的所有子级,iphone,ios,core-data,nsfetchrequest,Iphone,Ios,Core Data,Nsfetchrequest,如何获取父对象的所有子实体 我有一个由核心数据中的父实体填充的表。当用户触摸一个单元格时,我打算显示另一个包含该父项所有子项的表 对于这个问题,NSFetchRequest看起来怎么样 编辑: 模型是这样的: 学生>>日期[一对多,一个学生有很多天] 所以我想要任何给定学生的所有日期(通过触摸该学生的学生表单元格来选择),然后用该学生的日期填充日期表 谢谢 假设实体和类名是Student和Date,则Date->Student的反向关系称为Student Student *aStudent =

如何获取父对象的所有子实体

我有一个由核心数据中的父实体填充的表。当用户触摸一个单元格时,我打算显示另一个包含该父项所有子项的表

对于这个问题,
NSFetchRequest
看起来怎么样

编辑:

模型是这样的:

学生>>日期[一对多,一个学生有很多天]

所以我想要任何给定学生的所有日期(通过触摸该学生的学生表单元格来选择),然后用该学生的日期填充日期表


谢谢

假设实体和类名是
Student
Date
,则
Date
->
Student
的反向关系称为
Student

Student *aStudent = ...;
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
[fetchRequest setEntity: [NSEntityDescription entityForName: @"Date" inManagedObjectContext: [aStudent managedObjectContext]]];
[fetchRequest setPredicate: [NSPredicate predicateWithFormat: @"student == %@", aStudent]];

如果您有自定义类,则可以遍历生成的关系(
return[student dates]
)。这将使您在iOS4上获得一个无序的NSSet,或者,您可以通过一个获取请求来完成(注意,我使用ARC,所以这里没有发布/自动删除):


在第一个表委托中,当您触摸特定单元格时,我将向第二个表控制器注入特定的父属性。例如:

SecondController secondController = ... // alloc-init
secondController.studentToGrab = ...
其中,
SecondController
声明有一个
studentToGrab
属性,如下所示:

@property (nonatomic, retain) Student* studentToGrab; // use strong with ARC, if non-ARC remember to release it
从定义上来说,它是综合的

然后在第二个控制器中,在
viewDidLoad
方法中,您可以执行以下操作:

NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
NSEntityDescription *entity = [NSEntityDescription entityForName:@"YourNameEntityForDate" inManagedObjectContext:self.managedObjectContext];
[fetchRequest setEntity:entity];

[fetchRequest setFetchBatchSize:20];

NSPredicate* predicate = [NSPredicate predicateWithFormat:@"student == %@", studentToGrab];
[fetchRequest setPredicate:predicate];

// you can also use a sortdescriptors to order dates...

NSError *error = nil;
NSArray *resultArray = [self.managedObjectContext executeFetchRequest:fetchRequest error:&error];
if (error != nil) {

    NSLog(@"Error: %@", [error localizedDescription]);
    abort();
}

// use resultArray to populate something...

备注处理表时,还可以使用
NSFetchedResultController
类。当用于在表中显示数据时,它具有优势。

不需要单独的获取请求。通过从student对象访问关系(类似于
student.dates
),可以使用to-many关系中的所有对象(不要称它们为子实体,这是误导和不正确的)。这将为您提供一个NSSet,如果需要,您可以对其进行排序并将其转换为数组

没有模型就很难理解问题。分享一些细节。@Flex_上瘾了,谢谢,请看editnice帖子。关键是反向关系。若并没有反向关系,那个么使用fetch请求将更加困难。
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
NSEntityDescription *entity = [NSEntityDescription entityForName:@"YourNameEntityForDate" inManagedObjectContext:self.managedObjectContext];
[fetchRequest setEntity:entity];

[fetchRequest setFetchBatchSize:20];

NSPredicate* predicate = [NSPredicate predicateWithFormat:@"student == %@", studentToGrab];
[fetchRequest setPredicate:predicate];

// you can also use a sortdescriptors to order dates...

NSError *error = nil;
NSArray *resultArray = [self.managedObjectContext executeFetchRequest:fetchRequest error:&error];
if (error != nil) {

    NSLog(@"Error: %@", [error localizedDescription]);
    abort();
}

// use resultArray to populate something...