删除应用程序时是不是会从设备中删除 Core Data 数据库?

Posted

技术标签:

【中文标题】删除应用程序时是不是会从设备中删除 Core Data 数据库?【英文标题】:Is the Core Data database deleted from the device when an app is deleted?删除应用程序时是否会从设备中删除 Core Data 数据库? 【发布时间】:2011-07-08 04:40:53 【问题描述】:

我看到 Core Data 出现错误,这似乎表明当我从设备中删除应用程序时,旧数据库并未被删除。以下是我正在采取的步骤:

    从我的设备中删除应用程序(点按并按住应用程序,然后点按删除按钮)。 从TestFlight 安装应用程序。 运行应用程序。它启动并运行良好 - 直到它进行核心数据查询导致它崩溃。崩溃的根本原因是'keypath bar not found in entity '

现在,根据步骤 3 中所述的错误,似乎 Foo 上不存在“bar”,而我的问题与核心数据模型有关。但是,相同的代码在模拟器上运行没有问题,甚至在通过 Xcode 连接时在设备上运行良好。 (我已经多次验证我在 Xcode 中用于在模拟器和设备上运行的代码与我的 TestFlight 构建中的代码相同。)问题仅在通过 TestFlight 安装时存在,但我看不到有理由将我的问题归咎于 TestFlight。

我团队中的另一个人按照相同的步骤也会出现同样的问题,因此问题不是特定于我的设备。该应用未使用 iCloud、MobileMe 或任何其他同步功能。

当我从我的设备中删除应用程序时,是否会删除所有与 Core Data 相关的内容? Core Data 删除或初始化行为是否会根据应用在设备上的安装方式而改变?

【问题讨论】:

您是否使用任何 iCloud/MobileMe 同步?例如跨设备保存的首选项或对象。虽然这可能无法解释为什么它在不使用 TestFlight 时会起作用 - 但@steven-fisher 关于构建配置的评论可能适用。 我没有使用任何形式的同步。我已经尝试了其他配置并且遇到了同样的问题。 【参考方案1】:

所有文件都不能从模拟器中删除,或者在设备上进行开发构建的情况下。这与 Xcode 不想在开发期间每次构建时都从头开始重新安装整个应用程序包有关。它不会破坏所有东西,而是改变已更改的内容。这可能会导致问题,例如从构建目标中删除文件时,似乎无法可靠地从模拟器中删除 .xcdatamodel 文件。

但是,在设备上发布版本时,删除应用程序将删除应用程序沙箱中的所有文件,即应用程序可以写入的所有文件。

越狱设备不会出现这种情况。

更新:

阅读更新的父级后,我会注意到这个错误:

keypath bar not found in entity <NSSQLEntity Foo id=3>

... 在您尝试访问实体不支持的键路径时生成。此错误几乎总是发生在 fetch 请求的谓词中。一个常见的原因是尝试针对瞬态属性进行获取。 (根据定义,对存储运行的提取和瞬态属性在存储中不存在。)

但是,我确实看到了这种错误与我上面描述的开发安装问题有关。

既然这是真的:

只有通过TestFlight安装时才会出现问题...

...我不这么认为:

...但我认为没有理由将我的问题归咎于 TestFlight

... 确实有道理。如果除非您使用 TestFlight,否则一切正常,那么得出 TestFlight 触发问题的结论似乎是合理的。

【讨论】:

这是一个在设备上构建的版本(不是越狱),所以听起来应该删除所有内容。不过,似乎有什么东西在附近徘徊。谢谢你的回答。 问题不再发生,我不确定是什么解决了它。我接受这个答案是因为它的彻底性(并且因为它确实实际上回答了核心数据是否被删除的问题)。 切换到发布版本并在模拟器上运行它为我修复了它。【参考方案2】:

删除应用会删除其沙盒。这包括核心数据文件。

冒着提供明显建议的风险,您是否使用相同的构建配置进行构建?您对 TestFlight 的构建可能使用 Release 或 AdHoc 配置,您的设备构建可能使用 Debug。

【讨论】:

如果Core Data文件全部删除,数据迁移如何进行? Apple 是否有关于此主题的文档?我已经搜索过,但没有找到与此相关的任何内容。 我尝试使用不同的配置进行构建,但仍然遇到同样的问题。【参考方案3】:

您是否在删除之前强制关闭该应用程序?下次删除前尝试强制关闭

同样在项目本身中,在构建项目之前尝试清理,模拟器可能会检测到手机不是的实体

发现了一些具有相同错误类型的问题,但它们都是命名错误,我认为你的第一次工作? 我从笔记本电脑编译时从未使用过 testflight,但有没有办法从中清除版本,以绝对确保您正在使用的版本是 100% 准确且有效?

尝试查看以下链接:one two 和 three

【讨论】:

以上是关于删除应用程序时是不是会从设备中删除 Core Data 数据库?的主要内容,如果未能解决你的问题,请参考以下文章

如果数据发生变化,文档是不是会从 couchbase 视图中删除?

刷新Core Data数据库的正确方法

当我删除对象时,jQuery 是不是会自动从对象中删除附加的处理程序?

iOS Core Data 图像实际上并未被删除

从 Core Data 中删除和添加存储

如何清除/删除 iCloud 备份数据?