我的第二篇文章。我对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的特定案例的属性?
... 对于任何不正确的格式不好,并提前感谢您的帮助!
答案 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
}
由于