斯威夫特 Xcode。从头开始重建应用程序并尝试复制以前版本的 coredata 模型

Posted

技术标签:

【中文标题】斯威夫特 Xcode。从头开始重建应用程序并尝试复制以前版本的 coredata 模型【英文标题】:Swift Xcode. Rebuilding app from scratch and trying to copy over previous version coredata model 【发布时间】:2015-08-06 22:14:19 【问题描述】:

我正在构建的应用程序出现问题,并且在 cocoapods 和不兼容的构建设置方面遇到了许多错误。我决定重新开始并从头开始构建应用程序。我设法将几乎所有文件从旧应用程序复制到新应用程序并成功构建。我阅读了一些 SO 页面(即copy coredata、another,这意味着我也可以轻松地复制 coredata xcdatamodel 文件,并且看到模型中没有任何大量数据我决定尝试它(它我试图不必再次写出的数据结构,而不是数据本身)。

我将旧的 xcdatamodeld 文件从旧应用程序拖放到重建的应用程序,但是当我再次运行时,它给了我一个在线错误

 let modelURL = NSBundle.mainBundle().URLForResource("myAppName", withExtension: "momd")!

带有错误消息“致命错误:在展开可选值时意外发现 nil”

然后我注意到,当我将 myAppName.xcdatamodeld 文件从旧应用程序复制到新的重建文件时……它会将其复制为 myAppName.xcdatamodel ,即末尾没有 d 。我试过再次删除和复制,每次都一样。关于问题是什么以及如何成功复制 coredata 结构的任何想法?

【问题讨论】:

当然可以将 Core Data 模型从一个项目复制到另一个项目,我已经多次这样做了。只需确保正确复制捆绑包即可。我通常将实际文件(如果您有版本,则为捆绑包)复制到新项目位置,然后使用 XCode 添加现有模型。不过我最近还没有这样做,如果捆绑包没有正确添加到 XCode 项目中,我确实会想起一些问题。 顺便说一句,如果您丢失了“d”,那么您很可能从未正确复制过捆绑包。如果您在 finder 中右键单击该文件,您应该会看到一个“显示包内容”菜单,如果没有,请尝试找出您做错了什么。 谢谢邓肯。我只是再次尝试并做同样的事情。即我在 xcode 中创建了一个全新的项目。将其命名为 abc。勾选使用核心数据。使用 abc.xcdatamodeld 文件创建了一个新项目(从项目导航器查看)。然后我打开另一个 xcode 项目,单击 xcdatamodeld 文件,将其拖过并放入新的 abc 项目中。结果是,当我导航到 abc 文件夹时,“拖过”xcdatamodel 文件将 d 放在文件名的末尾......无论是在项目导航器中,还是在查找器中。我不确定我在这里做错了什么......任何建议 当你说你把它拖过去时——我假设那是在 XCode 中。尝试使用 Finder 将模型包复制到新项目,然后在新项目的 XCode 中执行以下操作:- 文件 -> 将文件添加到“newProject”并选择您复制到新项目文件夹的模型包。 听起来您没有为您的项目使用源代码控制。否则,您将能够恢复您的错误更改。我建议在继续之前使用某种 DVCS,例如 Git。 【参考方案1】:

我最终手动重新创建了 coredata 存储,但如果我下次需要这样做,请尝试通过 finder 复制它,而不是按照您的建议通过 xcode 复制它。谢谢帮助和详细说明

【讨论】:

【参考方案2】:

我刚刚遇到了同样的问题。这里的问题是,当您将模型从 Xcode 项目拖放到 Xcode 项目时,它会复制错误的扩展名,例如 xcdatamodel 而不是 xcdatamodeld。换句话说,缺少 'd' 字符(这是因为您复制了包内容而不是包本身,请参阅在 Finder 中对该文件显示包内容)。

当您将其从 Finder 复制到所需项目时 - 一切都很好,“d”就位,并且在带有“momd”扩展名的捆绑包中查找它时会匹配。

【讨论】:

不,那不是问题。我复制了,'d' 就在扩展中。问题是别的

以上是关于斯威夫特 Xcode。从头开始重建应用程序并尝试复制以前版本的 coredata 模型的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Webview 上显示网站的特定部分? (Xcode 7 斯威夫特 2)

如何将 UIScrollView 移动一帧的宽度? (Xcode,斯威夫特)

斯威夫特 2 尝试/捕捉

什么时候不重建***? [关闭]

部署Windows表单更改为客户端计算机而无需从头开始安装

尝试制作一个屏幕截图按钮,当单击按钮时将屏幕截图发送到我的相机胶卷。斯威夫特 3,Xcode 8,IOS