小编the*_*oid的帖子

多版本升级的核心数据迁移

我有一个使用Core Data的iPhone应用程序.

我做了一个更新并使用轻量级迁移从我的MOM(管理对象模型)的V1到V2.这非常有效.

当我想要去我妈妈的V3(及以上)时会发生什么?

  • 如果我决定继续轻量级迁移,它会自动处理从我的MOM的V1到V3和V2迁移到V3,还是需要做一些额外的事情?
  • 如果我决定使用映射模型,会发生什么?如何处理将V1和V2 MOM升级到V3的问题?我是否需要为V1到V3和V2到V3创建映射模型?
  • 这个问题更进一步......当我拥有V6 MOM并且仍然需要支持从V1 MOM升级的可能性时会发生什么?

另一个问题是确定当前MOM版本的最佳方法是什么?我应该使用isConfiguration:compatibleWithStoreMetadata:

谢谢你的帮助.我很喜欢核心数据.但它有时让我头晕目眩,我感到困惑,这就是我寻求一些圣人智慧的原因.

migration iphone cocoa core-data mapping-model

25
推荐指数
2
解决办法
3822
查看次数

管理核心数据iCloud事务日志

我正在使用iCloud和Core Data,它基于Apple指定的SQLite"库式"应用程序设计.虽然基本功能运行良好,但我担心事务日志及其管理方式.

虽然我的应用程序的数据库不是很大,但它非常活跃,并且在应用程序正在使用时核心数据堆栈被保存了很多次.我注意到为每个核心数据保存创建了一个新的事务日志.最终结果是我有一个TON的事务日志,它们比实际的数据库占用更多的空间.

1)事务日志是否会被自动修剪/合并,还是会无限期地继续增长,最终会成千上万,并占用数兆字节?似乎手动清除事务日志并重新创建.baseline存档的唯一方法是禁用然后重新启用iCloud(删除无处不在的容器并重新启动).但这显然不是一个好的解决方案.

2)我的当前架构经常保存核心数据堆栈,即使是微小的更改.通常,这是有道理的,因为我的数据库很小并且通常保存数据库文件始终是最新的.但是,考虑到事务日志的上述问题,我认为我应该尽量减少对数据库的保存.也许是在定时和/或应用过渡状态下这样做.

3)即使我通过减少保存数据库的频率来最小化事务日志的数量,这里似乎存在问题,因为日志将随着时间的推移而继续增加.最终,"交易日志"设计的好处将成为使用的iCloud存储量以及添加新设备时初始iCloud同步的负担.

由于Apple提供了非常稀疏的iCloud信息,而且几乎没有提供"最佳实践"的形式,我很感激社区的任何见解.

iphone core-data ios icloud

11
推荐指数
1
解决办法
1703
查看次数

核心数据 - 可选属性和性能

根据核心数据编程指南:

您可以指定属性是可选的 - 也就是说,不需要具有值.但是,一般情况下,不鼓励您这样做 - 特别是对于数值(通常,您可以使用具有默认值的强制属性 - 在0的模型中获得更好的结果).原因是SQL对NULL有特殊的比较行为,与Objective-C的nil不同.数据库中的NULL与0不同,搜索0将不匹配NULL的列.

我总是使数值非可选,但没有日期和字符串.我的代码很方便基于日期和/或字符串为零的逻辑.

基于以上建议,我正在考虑使我的数据库中的所有内容都是非可选的.对于日期,我可以将模型默认值设置为0,对于字符串,模型默认值为nothing("").然后,在我的代码中,我可以测试[date timeIntervalSince1970]!= 0的日期和string.length!= 0的字符串.

问题是,对于一个相对较小的数据库,从核心数据性能的角度来看,这真的很重要吗?如果有问题的属性永远不会通过谓词直接查询,那么权衡是什么?

optimization core-data

8
推荐指数
1
解决办法
3218
查看次数