【问题标题】:CoreData: Is it possible to merge .xcdatamodel "files"?CoreData:是否可以合并 .xcdatamodel “文件”?
【发布时间】:2010-09-06 19:28:09
【问题描述】:

我知道 .xcdatamodel 实际上是一个包含两个文件(elementslayout)的目录。

我知道这两个文件是二进制 plist,并且可以使用 plutil -convert xml1 将它们转换为 XML plist(虽然依赖这可能是“不明智的”,但它非常适合开发:我希望构建工具能够编译/优化/无论何时将它们放在设备上,并假设 Xcode 不会失去读取旧文件的能力,我总是可以将它们转换回 binary1)。

我的两个问题:

  • Xcode 会修改 both 文件,如果您移动一个实体(我原以为只是更改 layout),这对多个开发人员完全没有帮助。
  • 似乎没有简单的方法来合并更改(即使 XML plist 格式是 NSKeyedArchiver 序列化的对象图,所以文本合并不起作用)。
  • 似乎没有简单的方法来查看发生了什么变化(也许我可以将它们都转换为 XML 并进行比较……呃)。

有没有人找到解决这些问题的方法?我可以强制 Xcode 保存为 XML plist,或者强制 Subversion 在提交时将它们转换为 XML plist?差异甚至模糊合理吗?是否有执行 .xcdatamodel 差异的外部工具?

编辑:基于 SCM 的锁定并不能真正解决问题,只是说“我要编辑 X”;危险在于有人忘记锁定、进行更改、更新,然后一切都会中断。 svn:needs-lock 属性应该可以工作,但不幸的是 Xcode 不尊重 chmod -w on elementslayout (不可写的 .xcdatamodel 也不起作用,即使 Xcode 显示锁定图标,并且 svn 也失败了)。

【问题讨论】:

    标签: iphone core-data


    【解决方案1】:

    我认为这是不可能的。几年前在追踪一个损坏的文件时,我注意到模型文件似乎会更改大量的文本结构以进行微小的逻辑更改。它似乎不像代码,而是数据结构奇怪地移动了。这可能是序列化没有固定顺序的嵌套 NSSet 的结果。

    我认为您最好的选择是锁定数据模型并且一次只允许一次签出。坦率地说,我会对以老式方式合并任何 XML 文件感到非常紧张。

    【讨论】:

    • NSSet 可能以哈希表顺序保存。可以使其模糊一致(使用更好的散列并为散列表索引获取高位),但遗憾的是,使用 bad-hash-mod-a-large-prime 更为常见。它也不适用于集合...
    • 别把这当成福音,这只是我记忆中的猜测。
    【解决方案2】:

    Git 甚至 Mercurial 可能会比 SVN 更容易。

    另外,我最近看了WWDC 2011 Session VideoWhat's New in Core Data on iOS,听说在 Xcode 4.2 中,.xcdatamodel 文件是可区分的。这些差异是否模糊合理,我还没有测试过。假设我猜打开三个 Xcode GUI 数据模型编辑器并通过查看其他两个从头开始重建合并的数据模型会更容易。

    【讨论】:

    • 我有点怀疑 Git 知道如何合并来自 NSKeyedArchiver 的二进制 blob(我认为是 .xcdatamodel)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-09-15
    • 1970-01-01
    • 2011-03-11
    • 2013-02-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多