崩溃使 NSPersistentStoreCoordinator 的 url 无效
Posted
技术标签:
【中文标题】崩溃使 NSPersistentStoreCoordinator 的 url 无效【英文标题】:Crash invalidates url for NSPersistentStoreCoordinator 【发布时间】:2010-07-06 18:58:58 【问题描述】:我有一个 Core Data 应用程序有一个导致应用程序崩溃的错误,我还没有找到它的原因。崩溃的结果之一是下次启动应用程序时,它无法打开应用程序之前使用的持久存储。 addPersistentStoreWithType:
方法返回如下错误:
NSUnderlyingException = Error validating url for store;
当然,它无法检索应用程序之前存储的任何对象。有谁知道什么会导致应用程序不再能够找到其持久存储?
导致应用在所有这些发生之前关闭的崩溃会产生以下崩溃日志:
Exception Type: EXC_CRASH (SIGABRT)
Exception Codes: 0x00000000, 0x00000000
Crashed Thread: 0
Thread 0 Crashed:
0 libSystem.B.dylib 0x0007e98c __kill + 8
1 libSystem.B.dylib 0x0007e97c kill + 4
2 libSystem.B.dylib 0x0007e96e raise + 10
3 libSystem.B.dylib 0x0009361a abort + 34
4 libstdc++.6.dylib 0x000453b0 __gnu_cxx::__verbose_terminate_handler() + 376
5 libobjc.A.dylib 0x00005858 _objc_terminate + 104
6 libstdc++.6.dylib 0x00043776 __cxxabiv1::__terminate(void (*)()) + 46
7 libstdc++.6.dylib 0x000437ca std::terminate() + 10
8 libstdc++.6.dylib 0x00043896 __cxa_throw + 74
9 libobjc.A.dylib 0x00004714 objc_exception_throw + 64
10 Foundation 0x000013c2 __NSThreadPerformPerform + 570
11 CoreFoundation 0x00056a96 CFRunLoopRunSpecific + 1834
12 CoreFoundation 0x00056356 CFRunLoopRunInMode + 42
13 GraphicsServices 0x00003b2c GSEventRunModal + 108
14 GraphicsServices 0x00003bd8 GSEventRun + 56
15 UIKit 0x00002768 -[UIApplication _run] + 384
16 UIKit 0x0000146c UIApplicationMain + 688
17 Meetchu 0x00002568 main (main.m:14)
18 Meetchu 0x0000251c start + 32
我无法从这些信息中弄清楚发生了什么。任何人都可以帮助解决这些错误中的任何一个吗?
非常感谢。
【问题讨论】:
关于错误的更多信息:Domain=NSCocoaErrorDomain Code=258 "Operation could not be completed. (Coca error 258.)" 【参考方案1】:如果您将实际 URL 存储到应用程序目录中的文件,而不是每次相对于应用程序目录重新生成它,则无效 URL 是模拟器/设备将应用程序目录名称更改为的结果一个随机的 UUID。它有时会这样做以响应崩溃。
显而易见的第一步是记录 URL 并查看商店是否真的在那个位置。
【讨论】:
这是一个相对 URL,我让它输出路径。当应用程序运行时和它说它无效时,路径都是相同的。 我认为 URL 有时必须有效。 URL是否仅在应用程序的下一次启动时失败,即模式是否有效-->崩溃-->失败-->有效?崩溃后您是否必须做任何事情才能使其再次工作,或者它只会在您在崩溃后第二次启动应用程序时工作?【参考方案2】:画了,
在没有看到一些代码的情况下,我可以告诉你,当我第一次开始使用 Core Data 时,让我痛苦的一个来源是对你的模型进行版本控制。如果您以任何方式更改了托管对象模型,这将导致您的应用在没有一些版本控制(即轻量级)代码的情况下崩溃。
这可能不是您的问题的根源,但您可以尝试的一件事是从 iPhone 模拟器中删除您的应用程序或使用 iPhone 模拟器菜单中的“重置内容和设置”。如果这解决了问题,那么您正在查看迁移问题。
干杯。
【讨论】:
Neal,感谢您的想法,但这一切都发生在托管对象模型的原始版本中。德鲁以上是关于崩溃使 NSPersistentStoreCoordinator 的 url 无效的主要内容,如果未能解决你的问题,请参考以下文章