如何检查是否已建立关系 - 核心数据

时间:2013-07-09 20:10:54

标签: ios core-data nsmanagedobject nsentitydescription

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

我正在尝试创建一个详细视图,但我正在努力,我不确定它是否由于关系未建立或我的问题是将数据传递给新的视图控制器。

enter image description here

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

  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;

ERROR INVESTIGATION

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

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正常工作并且它是as;

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

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

2 个答案:

答案 0 :(得分:3)

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

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

它将关系指针设置为routineEntityDetailroutineEntity

由于routinedet是与<{1}}的反向关系routineinfo 自动添加到routineEntityDetail的{​​{1}}关系。

这没有意义:

routinedet

这看起来不错:

routineEntity

答案 1 :(得分: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];

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

如果我的假设不对,我道歉。

我编码的数据模型在这里: enter image description here