核心数据 - 如何访问实体属性?

Posted

技术标签:

【中文标题】核心数据 - 如何访问实体属性?【英文标题】:Core Data - How to access entity attribute? 【发布时间】:2013-08-13 02:52:10 【问题描述】:

我有 2 个实体。运动员和评估。 Athlete 与 Eval 有一对多的关系。一个 Athlete 可以有多个 Eval,但一个 Eval 只能有 1 个 Athlete。第一个为 Athlete 显示表格视图控制器的视图控制器。它显示所有运动员。当你点击一个运动员时,你会进入一个表格视图控制器,显示该运动员的所有评估。如何在我的 Athlete 表格视图中显示 evalArray[0] 顶部的 eval 属性?

这是我目前所拥有的:

allEvals.h

Eval *mostRecentEval = evalArray.firstObject;
AllAthletes *allAthletes = [self.storyboard instantiateViewControllerWithIdentifier:@"allAthletes"];
allAthletes.evalLastUpdated = mostRecentEval.date_recorded;

NSLog(@"%@",mostRecentEval.date_recorded);

当我记录它时,它会正确显示属性,但是当我转到所有运动员时,当视图出现时我再次记录它,它显示 (null)。谁能告诉我为什么?

【问题讨论】:

当你选择一个 eval 时会发生什么? @Carl Veazey 这只是 eval 的详细视图,您可以在其中编辑其属性并保存它。 您希望它在 Athlete 视图中可见,也就是说,在所有 eval 列表之前? 是的,我想在运动员表格视图的每个单元格上显示一个 eval 属性。 你说运动员有很多评价——你想展示哪一个? 【参考方案1】:

在您的 Athletes 视图控制器中,在 tableView:cellForRowAtIndexPath: 中,对于该行的 Athlete,获取他们的 Eval 对象并按日期对它们进行排序(但是您正在构建 eval 数组),然后获取最新的并使用它来填充运动员表视图单元格上的标签。

【讨论】:

它没有用,但我知道它会起作用。我遇到的问题是我错误地设置了评估。当我点击一个运动员时,它会向我显示所有评估。评估没有所有者,这是每个人的评估,而不仅仅是运动员被窃听。现在正在努力,感谢您的帮助。【参考方案2】:

那么,您如何在表格视图中对所有 Eval 的 Eval 进行排序?只需将排序保留在NSArray 中,然后在tableView:didSelectRowAtIndexPath: 中,从索引路径中获取行索引,然后在NSArray 中获取该索引处的元素。等等,你有用户点击的 Eval!

【讨论】:

不,我想从运动员视图访问评估。那么如何穿越两个实体呢?在显示运动员的第一个视图中,我将运动员的姓名作为视图单元格上的主要文本。我希望字幕文本成为与每个运动员相关的 Eval 属性。所以我会有很多很多 eval 属性。不仅仅是被选中的那个。【参考方案3】:

在 coreData 中,您不使用索引来引用您的“关系”

您将知道在您的表格数据源中选择了哪个“运动员”,

所以在点击单元格后,获取该“运动员”的“评估”

如果您对运动员使用数组:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath

 Athlete *selectedAthlete = [self.AthletesArray objectForIndex: indexPath.row];
 //deal with push new view controller, send the selectedAthlete

那么当你想为那个运动员获得评估时

用你的属性做一个谓词 = selectedAthlete

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"(athleteRelation =%@)", selectedAthlete];

现在是所选运动员的评估

祝你好运

【讨论】:

我知道如何知道选择了哪个,我正在尝试找到 Eval 的相关索引路径。所以对于 Athlete1 我想要 Eval1,Athlete2 我想要 Eval2。我想将 eval 属性放在 Athlete 表视图中。 嗨,CD 中没有索引,对于关系,请在您的 Athlete 和 Eval 之间创建一个关系 [一对多]

以上是关于核心数据 - 如何访问实体属性?的主要内容,如果未能解决你的问题,请参考以下文章

如何访问和修改核心数据

不同实体核心数据属性的最大值

如何使用核心数据的添加和删除(NSSet)访问器方法?

如何查询具有特定属性值的核心数据对象

循环访问核心数据对象数组时随机访问日期类型属性失败

我应该如何对我的核心数据实体中的 NSNumber 属性执行计算/更新?