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

时间:2011-07-08 04:40:54

标签: ios core-data

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

  1. 从我的设备中删除该应用(点击并按住该应用,然后点按删除按钮)。
  2. TestFlight安装应用。
  3. 运行该应用。它启动并运行正常 - 直到它产生导致它崩溃的Core Data查询。崩溃的根本原因是'在实体中找不到密钥路径栏< NSSQLEntity Foo id = 3>'
  4. 现在,根据步骤3中说明的错误,似乎Foo上不存在'bar',而我的问题是Core Data模型。但是,相同的代码在模拟器上运行没有问题,甚至在通过Xcode连接时在设备上运行正常。 (我已多次验证我在Xcode中使用的代码在模拟器和设备上运行的代码与我在TestFlight构建中的代码相同。)问题仅在通过TestFlight安装时才存在,但我看不到有理由将问题归咎于TestFlight。

    同样的问题发生在我的团队中的另一个人按照相同的步骤进行,所以问题不是我的设备特有的。该应用程序未使用iCloud,MobileMe或任何其他同步功能。

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

3 个答案:

答案 0 :(得分:6)

在模拟器上或在设备上进行开发构建时,不能删除所有文件。这与Xcode有关,不希望每次在开发过程中构建时都必须从头开始重新安装整个应用程序包。它不是贬低一切,而只是改变了改变的东西。这可能导致问题,例如从构建目标中删除文件时,似乎无法从模拟器中可靠地删除.xcdatamodel文件。

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

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

更新

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

keypath bar not found in entity <NSSQLEntity Foo id=3>
当您尝试访问实体不支持的密钥路径时,会生成

....此错误几乎总是发生在获取请求的谓词内。一个常见原因是尝试获取瞬态属性。 (对商店运行提取,并且商店中不存在定义的瞬态属性。)

但是,我已经看到这种错误与我上面描述的开发安装问题一起出现了。

因为这是真的:

  

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

......我不这么认为:

  

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

......真的很合理。如果一切正常,除非您使用TestFlight,那么似乎可以合理地断定TestFlight正在触发问题。

答案 1 :(得分:4)

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

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

答案 2 :(得分:2)

在删除应用之前,您是否强行关闭应用?在下次删除之前尝试强行关闭

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

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

请尝试查看以下链接:one twothree