如何使用CoreData获取相关实体的对象?

Posted

技术标签:

【中文标题】如何使用CoreData获取相关实体的对象?【英文标题】:How to get address the object of an related entity with CoreData? 【发布时间】:2010-05-20 08:24:09 【问题描述】:

好的,在我为 CoreData 修改现有 Apple 示例时遇到了死胡同,我开始全新创建自己的项目并且效果很好,......直到我尝试访问相关实体。

这就是我所做的。

我创建了 2 个实体,其中一个只是另一个的详细信息,所以是一对二的关系。

实体#1,股票:

姓名 价值 详细信息 --> 与实体 #2 的关系

实体 #2,库存详情:

银行 已发布 库存 --> 与实体 #1 的关系

现在,我为这两个实体创建了“托管对象类”。

然后我创建了几行来将一些数据放入其中

NSManagedObjectContext *context = [self managedObjectContext];

Stocks *stockinfo= [NSEntityDescription
    insertNewObjectForEntityForName:@"Stocks" 
    inManagedObjectContext:context];
stockinfo.name = @"Apple";
stockinfo.value = [NSNumber numberWithInt:200];


StockDetails *thestockdetails = [NSEntityDescription
    insertNewObjectForEntityForName:@"StockDetails" 
    inManagedObjectContext:context];

thestockdetails.bank = @"Bank of America";
thestockdetails.published = [NSDate date];
thestockdetails.stock = stocks_;

stockinfo.details = thestockdetails ;

NSError *error;
if (![context save:&error])

    NSLog(@"A Problem occured, couldn't save: %@", [error localizedDescription]);

只想在这里提一下,我没有收到任何错误。

接下来,我将所有内容放入一个 UITableViewController 中进行预览,另一个放入详细视图中。预览仅显示来自实体 #1(股票)的信息,选择后会显示详细视图。

现在在这里我还显示实体#1(股票)的信息,但我也想显示实体#2(StockDetails)。

这就是我尝试访问数据的方式:

StockDetails *details_ = [stockinfo details];

这给了我一个 EXC_BAD_ACCESS。

所以知道我在这里做错了什么吗?

谢谢

【问题讨论】:

【参考方案1】:

没有错

StockDetails *details_ = [stockinfo details];

你应该看看你是否不小心在某处发布了详细信息或股票信息。由于您在 UITableViewController 中有此对象,因此该对象可用于每一行/部分。

【讨论】:

好吧,愚蠢的我。实际上,我确实在 cellForRowAtIndexPath 方法中发布了详细信息。感谢您指出这一点,我一直在看电话。【参考方案2】:

对于一对一的关系,这应该有效:

StockDetails *details = [stockinfo valueForKey:@"details"];

【讨论】:

以上是关于如何使用CoreData获取相关实体的对象?的主要内容,如果未能解决你的问题,请参考以下文章

CoreData 获取所有相关对象

从 CoreData 关系中获取错误实体的对象

如何从 Core Data 中的关系相关实体获取属性?

获取CoreData中所有实体的所有子实体

如何使用 Core Data 从不相关的实体中获取数据?

删除核心数据对象时,如何在 Swift 5 中同时删除其所有相关对象?