从Xcode崩溃日志无法确定崩溃原因。

5

我有一个用户在他的iPhone 5上运行我的应用程序。他使用iTunes备份了数据。后来,他购买了一部新的iPhone 6S并从iTunes备份中恢复了数据。

当他启动我的应用程序时,它会在启动期间立即崩溃。我从他那里得到了崩溃日志,但没有错误信息。这是在我的AppDelegate中的自动生成的-applicationDocumentsDirectory函数期间崩溃的。

- (NSURL *)applicationDocumentsDirectory
{
    return [[[NSFileManager defaultManager] URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask] lastObject];
}

有没有办法让我确定是什么出了问题,看看是否可以修复?
Incident Identifier: 3A0D56CA-EEAF-4F5A-8D16-D182E61034D5
CrashReporter Key:   9f4ce42b70e98d925f135c618394817f9451767b
Hardware Model:      iPhone8,1
Process:             MyApp [1198]
Path:                /private/var/mobile/Containers/Bundle/Application/XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXX/MyApp.app/MyApp
Identifier:          com.inadaydevelopment.myapp
Version:             1.0.1 (1.0)
Code Type:           ARM-64 (Native)
Parent Process:      launchd [1]

Date/Time:           2015-10-02 14:30:25.25 -0700
Launch Time:         2015-10-02 14:30:25.25 -0700
OS Version:          iOS 9.0.1 (13A405)
Report Version:      105

Exception Type:  EXC_CRASH (SIGABRT)
Exception Codes: 0x0000000000000000, 0x0000000000000000
Exception Note:  EXC_CORPSE_NOTIFY
Triggered by Thread:  0

Filtered syslog:
None found

Thread 0 name:  Dispatch queue: com.apple.main-thread
Thread 0 Crashed:
0   libsystem_kernel.dylib          0x000000019950b1e0 __pthread_kill + 8
1   libsystem_pthread.dylib         0x00000001995d4f0c pthread_kill + 112
2   libsystem_c.dylib               0x000000019947eb78 abort + 140
3   MyApp                           0x000000010001ef7c -[AppDelegate applicationDocumentsDirectory] (AppDelegate.m:517)
4   MyApp                           0x000000010001eae8 -[AppDelegate managedObjectContext] (AppDelegate.m:430)
5   MyApp                           0x000000010002d004 -[BaseViewController awakeFromNib] (BaseViewController.m:54)
6   UIKit                           0x00000001890e6058 -[UINib instantiateWithOwner:options:] + 2188
7   UIKit                           0x0000000189324ea0 -[UIStoryboard instantiateViewControllerWithIdentifier:] + 196
8   UIKit                           0x0000000189325000 -[UIStoryboard instantiateInitialViewController] + 68
9   UIKit                           0x0000000188edd178 -[UIApplication _loadMainStoryboardFileNamed:bundle:] + 108
10  UIKit                           0x0000000188caee40 -[UIApplication _loadMainInterfaceFile] + 264
11  UIKit                           0x0000000188edc068 -[UIApplication _runWithMainScene:transitionContext:completion:] + 1316
12  UIKit                           0x0000000188ed9300 -[UIApplication workspaceDidEndTransaction:] + 168
13  FrontBoardServices              0x000000018d7737ec -[FBSSerialQueue _performNext] + 184
14  FrontBoardServices              0x000000018d773b6c -[FBSSerialQueue _performNextFromRunLoopSource] + 56
15  CoreFoundation                  0x000000018369c5a4 __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION__ + 24
16  CoreFoundation                  0x000000018369c038 __CFRunLoopDoSources0 + 540
17  CoreFoundation                  0x0000000183699d38 __CFRunLoopRun + 724
18  CoreFoundation                  0x00000001835c8dc0 CFRunLoopRunSpecific + 384
19  UIKit                           0x0000000188ca80c8 -[UIApplication _run] + 460
20  UIKit                           0x0000000188ca2f60 UIApplicationMain + 204
21  MyApp                           0x000000010001bdd0 main (main.m:16)
22  libdyld.dylib                   0x00000001993ee8b8 start + 4

看起来应用程序正在文档目录中查找某些文件,不幸的是它们不在应用程序文档目录中!!! - Teja Nandamuri
1
实际上,它只是在寻找文档目录本身,但如果这些目录不存在,它应该只返回nil,并且在nil上操作永远不应该崩溃。 - Kenny Wyland
你是否将文档路径存储在文件中,并在以后用于下载?因此,在通过iTunes重新安装后,路径肯定会发生变化。这可能是问题的原因。我也遇到过这样的问题。我将我的视频路径存储起来,然后通过iCloud重新安装后就无法再使用它们了。尝试在开始时检查路径是否有变化。 - Björn Ro
@Mr.T 我无法访问原始设备。这是来自一位用户的崩溃报告,他能够通过电子邮件将其发送给我。 - Kenny Wyland
@BjörnRo 不,我没有存储任何东西。崩溃的函数是Xcode样板文件,它动态确定查找文档文件的位置。 - Kenny Wyland
显示剩余7条评论
1个回答

0

当向一个已释放的实例发送消息时,经常会发生没有有用的堆栈跟踪而导致崩溃。几周前,我在玩弄UIViewController类别时遇到了这个问题。

当然,你是正确的,向nil发送消息不会造成任何伤害。但是,向一个已释放的实例发送消息会导致崩溃。
尝试打开ZombieObjects,然后当出现此情况时,您将获得日志,这可以帮助您找到错误。


这不是我能够复制的东西。它发生在野外,不是我可以重建二进制文件并再次尝试的情况。 - Kenny Wyland
很不幸。但是,为了将来的测试(除非你想实时查看内存使用情况),启用ZombieObjects也没有任何坏处。此外,Instruments在这种情况下也可以提供帮助。还要注意可能意外成为强引用的委托。祝好运 :) - Jan Nash

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接