【发布时间】:2012-09-10 01:29:49
【问题描述】:
我向我的医疗应用程序添加了一项新功能,允许用户将电子邮件附件导入应用程序的文档文件夹以供离线查看。将电子邮件附件导入运行 iOS 5.1 的 iPad 2 或运行 iOS 5.1 的 iPhone 4S 上的应用程序可以完美运行。但是,在运行 iOS 4.3 的原始 iPad 上,导入附件无法打开应用程序(它在显示启动屏幕之前挂起)。崩溃日志包含异常代码 0x8badf00d,并显示应用程序在尝试启动 20 秒后退出。虽然保持 iOS 4.x 兼容性并不重要,但如果这个问题可以解决,我想继续支持 4.x。我想知道这个问题是否与 iOS 4 或原始 iPad 的架构有关。任何想法都会非常感激,特别是因为在模拟器上测试这个错误似乎是不可能的。值得注意的是,除了 Apple 的可达性代码之外,应用程序的启动不需要任何网络活动;典型的启动时间几乎是瞬时的。谢谢。
【问题讨论】:
-
尝试在尝试启动 10 秒后暂停您的应用程序并查看代码被阻止的位置。或者,您可以使用 Time Profiler 工具或类似工具来查看时间的去向。
-
Time Profiler 显示 (NSFileManager directoryContentsAtPath:matchingExtension:options:keepExtension:error:] 如果我暂时注释掉重命名导入的附件文件的代码并删除附件导入过程创建的收件箱文件夹,那么剩余的收件箱文件夹大小为 0 字节。似乎在 Mail 应用程序退出和我的应用程序启动之间发生了错误。同样,错误令人费解,因为在运行 iOS 5.x 的设备上该过程非常快。在这一点上,我怀疑 iPad 1 相对较慢的处理器速度是一个问题。
-
经过代码替换的反复试验后,我发现此代码发生挂起,将附件文件名从其 url 转换为字符串(适用于 iOS5,但不适用于 iOS4):NSString *本地化名称 = 无; [url getResourceValue:&localizedName forKey:NSURLLocalizedNameKey 错误:NULL];非常感谢您的帮助并提醒我 Instruments 的用处。