2012-01-15 126 views
0

這就奇怪了..我的應用程序工作好之前,我複製的目標,使我的應用程序的付費版本。當我想說明一個UIViewController,它被加載,並顯示,但我的應用程序崩潰,並在設備日誌中給出此錯誤:應用程序崩潰

Thread 0 name: Dispatch queue: com.apple.main-thread 
Thread 0 Crashed: 
0 libobjc.A.dylib     0x341c2fbc objc_msgSend + 16 
1 UIKit       0x3735fdfe -[UINavigationController topViewController] + 46 
2 UIKit       0x37395ae4 -[UINavigationController viewDidDisappear:] + 80 
3 UIKit       0x373636ae -[UIViewController _setViewAppearState:isAnimating:] + 138 
4 UIKit       0x373beaea -[UIViewController _endAppearanceTransition:] + 258 
5 UIKit       0x373ecec8 -[UIViewController endAppearanceTransition] + 16 
6 UIKit       0x3741cf04 -[UIWindowController transitionViewDidComplete:fromView:toView:] + 1404 
7 UIKit       0x373bc934 -[UITransitionView notifyDidCompleteTransition:] + 140 
8 UIKit       0x373bc7b8 -[UITransitionView _didCompleteTransition:] + 896 
9 UIKit       0x37336814 -[UIViewAnimationState sendDelegateAnimationDidStop:finished:] + 464 
10 UIKit       0x3733bfb2 -[UIViewAnimationState animationDidStop:finished:] + 46 
11 QuartzCore      0x34a8dba0 CA::Layer::run_animation_callbacks(void*) + 196 
12 libdispatch.dylib    0x36bace86 _dispatch_main_queue_callback_4CF$VARIANT$up + 190 
13 CoreFoundation     0x33f4b2d6 __CFRunLoopRun + 1262 
14 CoreFoundation     0x33ece4d6 CFRunLoopRunSpecific + 294 
15 CoreFoundation     0x33ece39e CFRunLoopRunInMode + 98 
16 GraphicsServices    0x30752fc6 GSEventRunModal + 150 
17 UIKit       0x3734f73c UIApplicationMain + 1084 
18 MyApp      0x00002674 main (main.m:15) 
19 MyApp      0x00002624 start + 32 

我的錯誤在哪裏?誰能幫我?

+0

Xcode可以幫助你找到殭屍。 http://stackoverflow.com/questions/2190227/how-do-i-setup-nszombieenabled-in-xcode-4/8863063#8863063這會告訴你,當保留一個給定對象的數量變化 – Besi 2012-05-08 08:56:24

回答

1

這看起來像一個殭屍對象訪問,只是在它的臉上。不知道爲什麼單獨複製目標會導致這種情況,但是您是否嘗試過使用模擬器中的殭屍工具來分析您的應用程序?

編輯:

是。好的,現在你知道發生了什麼事。再次,我很難想象如何重複一個目標可能導致這種情況發生。應保留的對象不被保留。造成這種情況的原因有很多,但一個潛在的原因是@property應聲明爲retaincopy,但聲明爲assign。殭屍器械還可以幫助你:

下一步該錯誤消息,應該有一個圓圈一個小箭頭。如果你點擊它,它應該帶你到一個細節視圖,向你展示在生命中保留和釋放該對象的所有東西。這可能有幫助,但可能不會。如果問題是某個東西「過度放置」了對象,那麼您可能會從列表中知道,但更可能的問題是應該保留該對象的問題不是,並且不會顯示在列表中。

什麼可能是在該列表中有幫助,看看誰創建的對象,因爲通常這將是對象的邏輯「所有者」(或將其傳遞到邏輯所有者)。我會通過我的項目,並考慮有關對象的預期所有權。誰應該擁有這個對象?他們爲什麼不保留它?如果你仍然想加快Cocoa內存管理,我推薦閱讀Apple的指南:Advanced Memory Management Programming Guide修復殭屍對象訪問對於Objective-C開發人員來說是一個儀表。堅持與平臺,你無疑有很多機會磨練你的技術。

您也可能會考慮使用自動引用計數(ARC)。它的目的是爲了讓你不必考慮這些東西,而且實際上它的工作非常好。

編輯2:

只是突然想到:是否有可能你在原來的目標使用ARC,當你複製的目標,即設定不知何故關閉?這當然可以解釋它。

+0

完成!我收到這個錯誤:一個Objective-C消息被髮送到地址爲0x7848500的釋放對象(殭屍)。 – JackTurky 2012-01-15 15:34:35

+0

有什麼問題? – JackTurky 2012-01-15 15:35:55