3

在向核心数据添加数据时,您将如何检查是否已建立关系?目前,我的两个实体之间有TO MANY关系。

我正在尝试创建一个详细视图,但我正在苦苦挣扎,我不确定这是由于没有建立关系,还是我的问题是将数据传递给新的视图控制器。

在此处输入图像描述

我正在使用以下代码将数据添加到核心数据实体。在建立两者之间的关系时,这看起来正确吗?

ExcerciseInfo *info = [_fetchedResultsController objectAtIndexPath:indexPath];
NSManagedObject *routineEntity = [NSEntityDescription insertNewObjectForEntityForName:@"Routines"inManagedObjectContext:context];
NSManagedObject *routineEntityDetail = [NSEntityDescription insertNewObjectForEntityForName:@"RoutinesDetails" inManagedObjectContext:context];
    
[[routineEntityDetail valueForKey:@"name"] addObject:routineEntity];
    
[routineEntity setValue: info.name  forKey:@"routinename"];
[routineEntityDetail setValue: info.details.muscle  forKey:@"image"];
   
NSError *error = nil;

错误调查:

我使用了建议的方法之一,但是当我在NSLog(@"ExTitle *** %@",Ex.routinedet);routinedet 中测试关系时仍然遇到这个错误,因为@property (nonatomic, retain) NSSet *routinedet;在核心数据生成的NSObject 关系模型中:

Relationship 'routinedet' fault on managed object (0x749ea50) <Routines: 0x749ea50> (entity: Routines; id: 0x749c630 <x-coredata://C075DDEC-169D-46EC-A4B7-972A04FCED70/Routines/p1> ; data: {
    routinedet = "<relationship fault: 0x8184a20 'routinedet'>";
    routinename = "Leg Crunch";

我还进行了测试以确保 segue 正在工作并且它是这样的;

self.title = Ex.routinename;
RoutinesDetails *info;
NSLog(@"Image *** %@",info.image);

它将标题显示为正确的名称,但将图像字符串返回为空。

4

2 回答 2

3

假设实体在Core Data Detail View 中定义为关系,以下代码在两个对象之间建立关系:

[routineEntityDetail setValue:routineEntity forKey:@"routineinfo"];

它将关系指针从 设置routineEntityDetailroutineEntity

由于routinedet是 的反比关系, 因此会自动添加到 的routineinfo关系中。routineEntityDetailroutinedetroutineEntity

这根本不符合逻辑:

[[routineEntityDetail valueForKey:@"name"] addObject:routineEntity];

这看起来不错:

[routineEntity setValue: info.name  forKey:@"routinename"];
[routineEntityDetail setValue: info.details.muscle  forKey:@"image"];
于 2013-07-09T20:19:38.863 回答
1

如果没有看到您的数据模型,我无法确定,但我相信您会想要这样的东西:

ExcerciseInfo *info = [_fetchedResultsController objectAtIndexPath:indexPath];
Routine  *routine = [NSEntityDescription insertNewObjectForEntityForName:@"Routine"inManagedObjectContext:context];
RoutineDetail  *routineDetail = [NSEntityDescription insertNewObjectForEntityForName:@"RoutineDetail" inManagedObjectContext:context];

routine.routineName = info.name;
routineDetail.image = info.details.muscle;

[routine addRoutineDetailsObject:routineDetail];

这假设一个例程有许多routineDetails,并且通过在XCode 中生成NSManagedObject 子类来命名关系。我还删除了类名中的复数名称,因为模型类通常是单数的。

如果我的假设不成立,我深表歉意。

我编码的数据模型在这里: 在此处输入图像描述

于 2013-07-09T20:42:41.773 回答