【问题标题】:access to many relationship entity data访问许多关系实体数据
【发布时间】:2014-07-24 06:48:23
【问题描述】:

我的第二篇文章在这里。我对 IOS 的核心数据还是很陌生。我已经阅读了苹果开发者页面,但我仍然不明白如何实现代码。

我有 2 个有关系的实体:学生 > StudentInfo

学生属性(字符串):名字、姓氏、学生身份

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

由于每个学生都有很多学生信息,我将如何完成仅查找具有 (itemA == "abc") 的实体并将相关学生的学生 ID 与 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 的特定案例的属性?

... 很抱歉任何格式不正确,并提前感谢您的帮助!

【问题讨论】:

  • 我没有任何代码设置,但您需要在fetchRequest 上为entity 附加NSPredicate。检查this SO question以获取示例。 stackoverflow.com/questions/1347776/…
  • @LyricalPanda 我阅读了链接,您是否有任何示例代码可以建议或更多指导?我现在正在玩弄它,看看我是否能弄清楚更多。

标签: ios core-data relationship accessor


【解决方案1】:

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

当你为你的模型生成类(Editor -> Create NSManagedObject subclass)时,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   
}

谢谢

【讨论】:

  • 也许我的帖子不清楚。我已经用 NSManagedObject 子类创建了两个实体。我要问的是如何搜索所有 (Student) 及其所有关系,这样一旦找到 (itemA == "abc") 的匹配项,我就可以显示 studentid 并说 itemC .
猜你喜欢
  • 2017-01-25
  • 1970-01-01
  • 1970-01-01
  • 2014-08-16
  • 1970-01-01
  • 1970-01-01
  • 2023-03-05
  • 2011-11-16
  • 2010-12-07
相关资源
最近更新 更多