核心数据关系未保存到商店

时间:2011-12-27 22:46:23

标签: iphone core-data

我有这个命令行应用程序,它遍历CSV文件以创建Core Data SQLite存储。在某些时候,我正在构建这些SPStop对象,它们具有routesschedules到多个关系:

SPRoute *route = (SPRoute*)[self.idTransformer objectForOldID:routeID ofType:@"routes" onContext:self.coreDataController.managedObjectContext];

SPStop *stopObject = (SPStop*)[self.idTransformer objectForOldID:stopID ofType:@"stops" onContext:self.coreDataController.managedObjectContext];
[stopObject addSchedulesObject:scheduleObject];
[stopObject addRoutesObject:route];

[self.coreDataController saveMOC];

如果我记录我的stopObject对象(保存之前或之后;结果相同),我会得到以下结果:

latitude = "45.50909";
longitude = "-73.80914";
name = "Roxboro-Pierrefonds";
routes =     (
    "0x10480b1b0 <x-coredata://A7B68C47-3F73-4B7E-9971-2B2CC42DB56E/SPRoute/p2>"
);
schedules =     (
    "0x104833c60 <x-coredata:///SPSchedule/tB5BCE5DC-1B08-4D11-BCBB-82CD9AC42AFF131>"
);

请注意路径和计划对象URL格式有何不同?这必须是有原因的,因为当我使用sqlite商店并打印相同的stopObject时,我的routes设置为空,但schedules设置为空。

我意识到这是非常少的调试信息,但也许不同的URL格式为某人敲响了警钟?我可能做错了会导致这种情况吗?

编辑:似乎一个SPRoute对象一次只能分配给一个SPStop。我在迭代结束时插入断点并且每次都看一下sqlite,我确实看到一旦SPRoute对象(已经分配给先前的stop.routes)被分配给新的SPStop ,之前的stop.routes集被清空。怎么会这样?

1 个答案:

答案 0 :(得分:1)

好吧,我们已经禁用了Xcode的反向关系警告,该警告明确指出:

  

SPStop.routes没有反转;这是一个先进的   设置(没有对象可以在特定的多个目的地   关系)

这正是我们的问题。我们抛弃了反向关系,因为Apple声称它们只对“数据完整性”有利。我们的商店是只读的,所以我们认为我们并不真正需要它们。我们现在知道,反向关系不仅仅是“数据完整性”:P

相关问题