我有一位客户正在使用遭遇崩溃的iPad 2,我无法重现。
崩溃报告:
Last Exception Backtrace:
0 CoreFoundation 0x37a5429e __exceptionPreprocess
1 libobjc.A.dylib 0x32b3b97a objc_exception_throw
2 CoreData 0x317438d8 +[NSEntityDescription entityForName:inManagedObjectContext:]
3 MyApp 0x000fc916 -[DetailViewController fetchedResultsController] (DetailViewController.m:237)
4 MyApp 0x000fc374 -[DetailViewController addToMySermons] (DetailViewController.m:170)
5 MyApp 0x000fc080 -[DetailViewController actionSheet:didDismissWithButtonIndex:] (DetailViewController.m:140)
6 UIKit 0x35db60cc -[UIActionSheet(Private) _popoutAnimationDidStop:finished:]
7 UIKit 0x35a73aae -[UIViewAnimationState sendDelegateAnimationDidStop:finished:]
8 UIKit 0x35ae88ca -[UIViewAnimationState animationDidStop:finished:]
9 QuartzCore 0x30a91bd4 CA::Layer::run_animation_callbacks(void*)
10 libdispatch.dylib 0x358924b2 _dispatch_client_callout
11 libdispatch.dylib 0x358971b8 _dispatch_main_queue_callback_4CF$VARIANT$mp
12 CoreFoundation 0x37a27f36 __CFRunLoopRun
13 CoreFoundation 0x3799aeb8 CFRunLoopRunSpecific
14 CoreFoundation 0x3799ad44 CFRunLoopRunInMode
15 GraphicsServices 0x3989a2e6 GSEventRunModal
16 UIKit 0x35ab22f4 UIApplicationMain
17 MyApp 0x000f595a main (main.m:16)
18 MyApp 0x000f5910 start + 36
我可以看到它发生在+ [NSEntityDescription entityForName:inManagedObjectContext:]调用中,如下所示:
NSEntityDescription *entity = [NSEntityDescription entityForName:@"StoredPage" inManagedObjectContext:self.managedObjectContext];
self.managedObjectContext是从UISplitViewController左侧的UITableViewController传入的。
这对我和使用该应用程序的数千名其他人来说很好,只有这一个人才有问题。我们让他删除了应用程序并重新安装它并重新启动他的iPad,但它没有帮助。
有没有办法让我捕获抛出的实际异常并将其显示在UIAlertView中,以便我可以看到实际发生了什么,或者我将不得不获取他的UDID并给他一个调试版本?
答案 0 :(得分:2)
对我来说,问题是ManagedObjectContext没有持久存储协调器。
要发现引发异常的详细信息,我执行了以下操作
NSEntityDescription *entity = nil;
@try {
// do something
entity = [NSEntityDescription entityForName:@"MyEntity" inManagedObjectContext:managedObjectContext];
}
@catch (NSException *exception) {
// error happened! do something about the error state
NSLog(@"exception creating entity for managedobject content MyEntity = %@", exception);
return nil;
}
@finally {
// do something to keep the program still running properly
}
记录了以下内容:
```
为managedobject内容创建实例的异常MyEntity = + entityForName:nil不是用于搜索实体名称'MyEntity'的合法NSPersistentStoreCoordinator
```
我很欣赏这是一个老问题,但我怀疑这不是一个罕见的问题。
答案 1 :(得分:0)
您的核心数据模型是否已更改?
我看到一些难以复制的内容,当Core Data模型文件与创建数据库文件时使用的文件不匹配时,会发生奇怪的崩溃。
最好通过始终创建核心数据模型(架构)的新“版本”来避免这种情况。