我有这个命令行应用程序,它遍历CSV文件以创建Core Data SQLite存储。在某些时候,我正在构建这些SPStop对象,它们具有routes
和schedules
到多个关系:
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
集被清空。怎么会这样?
答案 0 :(得分:1)
好吧,我们已经禁用了Xcode的反向关系警告,该警告明确指出:
SPStop.routes没有反转;这是一个先进的 设置(没有对象可以在特定的多个目的地 关系)
这正是我们的问题。我们抛弃了反向关系,因为Apple声称它们只对“数据完整性”有利。我们的商店是只读的,所以我们认为我们并不真正需要它们。我们现在知道,反向关系不仅仅是“数据完整性”:P