iphone - 核心数据关系未保存到存储中

标签 iphone core-data

我有这个命令行应用程序,它可以迭代 CSV 文件来创建核心数据 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 集将被清空。怎么会这样?

最佳答案

好吧,我们已经禁用了 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/

相关文章:

ios - 在实体核心数据中选择特定属性

ios - 使用核心数据和 NSFetchedResultsControllers 预填充 UITextField

ios - 如何使用 NSSet 正确编码核心数据下钻

iphone - 在 iPhone 中使用线程,在这种情况下我需要它们吗?

ios - 如何在 JavaScript 上检测 iOS 13?

iphone - 制作 iPhone 4S ***ONLY*** 应用程序

ios - 多个持久存储协调器核心数据

iphone - iPhone 中是否有看起来像 LED 的字体?

iphone - 带有静态图像的 UINavigationBar

swift - 如何计算 UITableView 单元格中的总值?