2013-07-02 77 views
0

過去幾天裏,我的頭髮一直在撕裂,因爲我的應用程序中有一個錯誤似乎隨機發生了!我想我會問在這裏看看有沒有人有過類似的經歷。ios Xcode調試 - 奇怪的bug - 關閉視圖控制器

當某個視圖控制器加載時,該應用程序正在崩潰。但是這似乎只發生在每25到30次中的1次 - 所以它對我來說似乎完全是隨機的!

控制檯顯示以下錯誤

Warning: Attempt to dismiss from view controller <UINavigationController: 0x1f025c30> while a presentation or dismiss is in progress! 

然後應用程序崩潰。

但是,實際上並沒有任何代碼可以關閉此視圖控制器 - 我使用JASidepanels(https://github.com/gotosleep/JASidePanels),但是此錯誤只發生在一個視圖中。因爲沒有代碼可以駁回它,所以我真的不確定這是怎麼發生的。 (JASidepanels幻燈片和隱藏此面板 - 但是當視圖加載這不叫)

下面是symbolicated崩潰報告 - 我真的不能找到太多的使用在這裏都:

Incident Identifier: 8E0C4F14-1B7B-4241-A1D3-37AD55F3D432 
CrashReporter Key: fb5a345eac1c4c3ba4fbe6158b1d6af5833f137e 
Hardware Model:  iPad2,7 
Process:   appName [7665] 
Path:   /var/mobile/Applications/130C6C0F-40E0-4EE7-AD2A-F7CFCFD6C462/appName.app/appName 
Identifier:  appName 
Version:   ??? (???) 
Code Type:  ARM (Native) 
Parent Process: launchd [1] 

Date/Time:  2013-07-02 14:24:24.588 +0100 
OS Version:  iOS 6.1.3 (10B329) 
Report Version: 104 

Exception Type: EXC_CRASH (SIGABRT) 
Exception Codes: 0x0000000000000000, 0x0000000000000000 
Crashed Thread: 9 

Last Exception Backtrace: 
0 CoreFoundation     0x32f5729e __exceptionPreprocess + 158 
1 libobjc.A.dylib     0x3ae1297a objc_exception_throw + 26 
2 CoreFoundation     0x32f56d80 __NSFastEnumerationMutationHandler + 124 
3 UIKit       0x34d6ff92 -[UIView(Hierarchy) subviews] + 326 
4 UIKit       0x34d7b04a -[UIView(Geometry) resizeSubviewsWithOldSize:] + 22 
5 UIKit       0x3519cc28 -[UIView(AdditionalLayoutSupport) _is_layout] + 112 
6 UIKit       0x34d68a8c -[UIView(Hierarchy) layoutSubviews] + 68 
7 UIKit       0x34d627fe -[UIView(CALayerDelegate) layoutSublayersOfLayer:] + 254 
8 QuartzCore      0x34b0cd86 -[CALayer layoutSublayers] + 210 
9 QuartzCore      0x34b0c924 CA::Layer::layout_if_needed(CA::Transaction*) + 456 
10 QuartzCore      0x34b0d858 CA::Layer::layout_and_display_if_needed(CA::Transaction*) + 12 
11 QuartzCore      0x34b0d23e CA::Context::commit_transaction(CA::Transaction*) + 234 
12 QuartzCore      0x34b0d04c CA::Transaction::commit() + 312 
13 QuartzCore      0x34b0ceac CA::Transaction::observer_callback(__CFRunLoopObserver*, unsigned  long, void*) + 56 
14 CoreFoundation     0x32f2c6c8 __CFRUNLOOP_IS_CALLING_OUT_TO_AN_OBSERVER_CALLBACK_FUNCTION__ + 16 
15 CoreFoundation     0x32f2a9bc __CFRunLoopDoObservers + 272 
16 CoreFoundation     0x32f2ad12 __CFRunLoopRun + 738 
17 CoreFoundation     0x32e9deb8 CFRunLoopRunSpecific + 352 
18 CoreFoundation     0x32e9dd44 CFRunLoopRunInMode + 100 
19 GraphicsServices    0x36a692e6 GSEventRunModal + 70 
20 UIKit       0x34db32fc UIApplicationMain + 1116 
21 appName       0x0009c1a2 main (main.m:16) 
22 libdyld.dylib     0x3b249b1c start + 0 

和線程9 - 即墜毀:

Thread 9 Crashed: 
0 libsystem_kernel.dylib   0x3b310d98 __workq_kernreturn + 8 
1 libsystem_c.dylib    0x3b25ecf6 _pthread_workq_return + 14 
2 libsystem_c.dylib    0x3b25ea12 _pthread_wqthread + 362 
3 libsystem_c.dylib    0x3b25e8a0 start_wqthread + 4 

任何幫助將不勝感激!

回答

0

駁回呈現的視圖控制器

當談到時間以關閉一個呈現視圖控制器,所述 優選的方法是讓所述呈現視圖控制器駁回 它。換句話說,只要有可能, 呈現給視圖控制器的相同視圖控制器也應該對 負責解除視圖控制器。雖然有幾種技術用於通知 呈現視圖控制器,其呈現的視圖控制器應當解除 ,但首選技術是委託。欲瞭解更多信息 ,請參閱「使用代表團與其他 控制器進行通信。」

確保你不(根據文檔)解僱你的viewController這個視圖 - 控制內。解除viewController外部使用委託的最佳方式。 「Using Delegation to Communicate with Other Controllers.」

+0

謝謝安東 - 唯一的問題是我不想解僱它!這個錯誤正在加載視圖時發生。 – larrysanchez

0

嘗試使用

if (![self.presentedViewController isBeingPresented]) { 

} 
+0

謝謝Omarj--唯一的問題是我不想解僱它!這個錯誤是正確的,因爲視圖被加載 - 我甚至沒有代碼來關閉.m文件中的這個視圖控制器。 – larrysanchez

+0

@PaulWalton當您嘗試呈現視圖控制器兩次時,會出現此警告。 或您的展示代碼調用兩次檢查,讓我知道你在找什麼? – Omarj

+0

@PaulWalton或當您嘗試呈現視圖控制器,而有一個已經呈現。 – Omarj

0

我不認爲這是在所有模式/呈現視圖控制器連接。

從堆棧跟蹤中只有一件事情很清楚 - 這是一個典型的異常,它是由集合中的對象在同一時間枚舉時引起的。在這種情況下,集合可能是子視圖的集合(您的主線程正在枚舉它們)。

其中一個常見原因是從輔助線程(而不是主線程)更新視圖層次結構。

+0

感謝蘇丹......我一直在想同樣的說實話 - 我只是想跟蹤什麼可以訪問該視圖控制器 - 這是相當標準的 - 查看負載,從SQLite加載一些數據並顯示結果。很奇怪! – larrysanchez

+0

@PaulWalton我不認爲這是我們可以在沒有代碼的情況下發現的東西。 – Sulthan