访问许多关系实体数据

时间:2014-06-03 19:38:45

标签: ios core-data relationship accessor

我的第二篇文章。我对IOS的核心数据仍然很陌生。我已经阅读了Apple开发者页面,但我仍然不清楚如何实现代码。

我有两个有关系的实体:学生< ----->> StudentInfo

学生属性(字符串):firstname,lastname,studentid

StudentInfo属性(字符串):itemA,itemB,itemC

由于每个学生都有很多StudentInfos,我将如何完成仅查找实体的任务(itemA ==" abc")并显示相关学生的学生以及itemC ?

编辑

NSEntityDescription *entitydesc = [NSEntityDescription entityForName:@"Student" inManagedObjectContext:self.managedObjectContext];
NSFetchRequest *req = [[NSFetchRequest alloc] init];
[req setEntity:entitydesc];

NSPredicate *predi = [NSPredicate predicateWithFormat:@"studentid like %@", self.idTextField.text];
[req setPredicate:predi];

NSError *error;
NSArray *matchingData = [self.managedObjectContext executeFetchRequest:req error:&error];

if (matchingData.count <= 0) {
    self.testLabel.text = @"nada found";
} else {
    NSString *firstName;
    NSString *lastName;

    for (NSManagedObject *obj in matchingData) {
        firstName = [obj valueForKey:@"firstname"];
        lastName = [obj valueForKey:@"lastname"];
    }
    self.testLabel.text = [NSString stringWithFormat:@"%@%@", firstName, lastName];

}

到目前为止我得到了这么多,这对于从主要Student实体访问数据非常有用,但是我如何访问实体StudentInfo的特定案例的属性?

... 对于任何不正确的格式不好,并提前感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

首先,您必须在模型设计器上建模实体之间的关系。选择学生,单击关系部分的“+”符号,并使其指向学生信息。创建后,在右侧窗格中打开其属性,并将其类型更改为“To many”。

当您为模型生成类时(Editor - &gt; Create NSManagedObject子类),Xcode将自动生成NSSet类型的属性,该属性包含属于该关系的所有对象,并且还有一些方法可以轻松添加或从中删除对象。

因此,如果你生成类Student,StudentInfo,并且有一个从Student到(很多)StudentInfo的关系,名为studentInfo,你会有类似的东西(注意名称可能会有所不同,检查生成的头文件) :

Student* yourStudent = ....;
StudentInfo* info1 = .....;
StudentInfo* info2 = ....;

[yourStudent addStudentInfoObject: info1];
[yourStudent addStudentInfoObject: info2];
// and so on

现在,您可以迭代表示您的关系的NSSet属性,以便找到您的对象:

for(StudentInfo* info in yourStudent.studentInfo) {
    //do whatever you want with info, like comparing its name   
}

由于