NSURLCache在iOS 6.1下崩溃

时间:2013-02-08 10:02:27

标签: ios ios6 nsurlcache

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

我正在体验 每次我的应用程序启动时,EXC_BAD_ACCESS从队列调用的strlen函数崩溃com.apple.CFURLCACHE_work_queue,第一次除外。

NSURLCache crashes

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

[[NSURLCache sharedURLCache] removeAllCachedResponses];

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

2 个答案:

答案 0 :(得分:1)

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

这是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

将此报告为Apple的TSI,它已经过审核,他们要求我将此记录为错误,仍然需要这样做。

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

答案 1 :(得分:1)

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

this Apple dev forums thread概述了我的问题的完整详情。

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

我能够通过删除模拟器的Library / Caches目录(~/Library/Application Support/iPhone Simulator/6.1/Library/Caches)来反复并持续地停止我的测试崩溃,并通过重新创建该目录来使崩溃返回。

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

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