4

使用 iOS 6.1,我的应用程序在尝试发出多个 HTTP 请求时会在启动后直接崩溃,但它在任何小于 6.1 的操作系统上都可以正常工作。

我 在从 Queue 调用EXC_BAD_ACCESS的函数中遇到崩溃:每次启动我的应用程序时,除了第一次。strlencom.apple.CFURLCACHE_work_queue

NSURLCache 崩溃

我可以通过在应用程序启动后直接清除 NSURLCache 来解决问题:

[[NSURLCache sharedURLCache] removeAllCachedResponses];

还有其他人经历过这些崩溃吗?导致这些崩溃的应用程序代码中是否存在某些问题?或者这应该是提交给苹果的错误吗?

4

2 回答 2

1

自 iOS 6.1 以来,使用新安装的应用程序遇到了类似的崩溃。不同之处在于点击表格视图中的文本单元格时会发生崩溃。此时没有发出任何 Web 请求。

这是BT:

thread #4: tid = 0x2903, 0x3ae7ad74 libsystem_c.dylib`strlen + 28, stop reason = EXC_BAD_ACCESS (code=1, address=0x0)
frame #0: 0x3ae7ad74 libsystem_c.dylib`strlen + 28
frame #1: 0x3ac6be24 libsqlite3.dylib`___lldb_unnamed_function282$$libsqlite3.dylib + 1232
frame #2: 0x3ac74a5e libsqlite3.dylib`sqlite3_file_control + 174
frame #3: 0x328493fe CFNetwork`__CFURLCache::RecreateEmptyPersistentStoreOnDiskAndOpen_NoLock() + 30
frame #4: 0x32849000 CFNetwork`__CFURLCache::RecreateEmptyPersistentStoreOnDiskAndOpen() + 44
frame #5: 0x327f9488 CFNetwork`__CFURLCache::OpenDatabase() + 192
frame #6: 0x32846a72 CFNetwork`__CFURLCache::ProcessCacheTasks0(bool) + 358
frame #7: 0x32846900 CFNetwork`__CFURLCache::ProcessCacheTasks(bool) + 36
frame #8: 0x3284681e CFNetwork`__CFURLCache::_CFURLCacheTimerCallback0() + 358
frame #9: 0x328466ac CFNetwork`__CFURLCache::_CFURLCacheTimerCallback(void*) + 32
frame #10: 0x328490fc CFNetwork`__SignalWorkerTaskToPerformWork_block_invoke_0 + 12
frame #11: 0x3ae4611e libdispatch.dylib`_dispatch_call_block_and_release + 10
frame #12: 0x3ae49ece libdispatch.dylib`_dispatch_queue_drain$VARIANT$mp + 142
frame #13: 0x3ae49dc0 libdispatch.dylib`_dispatch_queue_invoke$VARIANT$mp + 40
frame #14: 0x3ae4a91c libdispatch.dylib`_dispatch_root_queue_drain + 184
frame #15: 0x3ae4aac0 libdispatch.dylib`_dispatch_worker_thread2 + 84
frame #16: 0x3ae7aa10 libsystem_c.dylib`_pthread_wqthread + 360
frame #17: 0x3ae7a8a4 libsystem_c.dylib`start_wqthread + 8

将此作为 TSI 报告给 Apple,经过审查,他们要求我将此记录为错误,仍然需要这样做。

有趣的是,您找到的解决方案也帮助了我,在启动时清除缓存解决了这个问题。

于 2013-02-13T11:35:02.293 回答
1

这只是答案的一半,但我在运行单元测试时遇到了一个非常相似的问题。奇怪的是,这似乎只是今天才开始发生。

我的问题的全部细节在这个 Apple 开发论坛线程中进行了概述。

我们的问题之间的共同联系似乎是调用RecreateEmptyPersistentStoreOnDiskAndOpen_NoLock(). 如果我对 CFURLCache 的理解是正确的,并且基于回溯,它在内部使用 sqlite3 数据库作为缓存。我假设这个函数调用在磁盘上创建了空的 sqlite3 数据库。

通过删除模拟器的 Library/Caches 目录~/Library/Application Support/iPhone Simulator/6.1/Library/Caches

删除整个模拟器主目录并通过在模拟器中启动我的应用程序来重新创建它也可以修复并重新创建问题。

我猜这是一个操作系统错误;奇怪的是为什么对我来说,它才刚刚开始发生。

于 2013-03-27T11:05:25.253 回答