我有这个命令行应用程序,它可以迭代 CSV 文件来创建核心数据 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
集将被清空。怎么会这样?
最佳答案
好吧,我们已经禁用了 Xcode 的反向关系警告,其中明确指出:
SPStop.routes does not have an inverse; this is an advanced setting (no object can be in multiple destinations for a specific relationship)
这正是我们的问题。我们放弃了逆向关系,因为苹果声称它们只对“数据完整性”有益。我们的商店是只读的,所以我们认为我们并不真正需要它们。我们现在了解到,逆关系不仅仅是为了“数据完整性”:P
关于iphone - 核心数据关系未保存到存储中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8650063/