2011-03-11 101 views
6

是否有其他人與Xcode 4有問題,其中viewDidLoad被調用兩次?我已經在Xcode 3.2和Xcode 4中運行了相同的項目,並且它僅在Xcode 4中運行。Xcode 4 - viewDidLoad問題

+0

您的viewDidLoad僅爲特定的UIViewController或所有視圖控制器調用兩次?另外,你如何知道它在同一個viewController(breakpoints,nslog)上被調用兩次?爲了確保它是相同的UIViewController,你可以在viewDidLoad中做NSLog(@「調用兩次%p」,self)。 %p將顯示​​對象的十六進制地址。 – Sam 2011-03-11 22:47:20

+0

斷點和nslog語句。它只發生在xcode 4中,我昨晚下載了3.2.6,並且該項目在那裏運行良好。它是應用程序首次啓動時唯一的我的rootviewcontroller。在完成測試並將其推送到應用商店後,我會再次嘗試xcode 4以及您提到的日誌聲明。我真的認爲它的xcode 4,它是一個通用的應用程序,具有獨立的筆尖,啓動時它們加載完全不同的代碼,但它發生在這兩個和theres裏,沒有什麼新鮮的,我的ipad應用程序已經通過蘋果公司的全面測試和認可。 – Renegade428 2011-03-12 16:22:05

+0

當你解決問題時,我很想知道那些NSLog發生了什麼。祝你一切順利。 – Sam 2011-03-14 19:51:23

回答

0

Xcode只是IDE - 它不應該影響您的應用程序執行時發生的情況。如果存在差異,則更有可能您正在爲不同的iOS版本構建。

+0

感謝您的回覆。我知道Xcode只是一個ide ..我的目標4.2和4.3 xd4和3.2.6 sdk建設,我只有xcode 4的麻煩。即使我建設的不同版本我的viewdidload不應該被稱爲在我的應用程序沒有完成啓動並沒有記憶警告或任何事情之前兩次。 – Renegade428 2011-03-12 16:24:53

+2

我建議在bugreporter.apple.com上提交錯誤報告。 – 2011-03-18 16:28:53

4

在對Apple Developer forums進行研究之後,似乎在某些情況下,Xcode 4會創建錯誤的Interface Builder NIB。結果是應用程序的rootViewController被加載了兩次,這真的讓事情搞砸了。在Xcode 3中加載的相同項目不會出現問題。

在我的通用應用程序中,它隻影響iPad的NIB。 iPhone很好。

我能夠解決這個問題的方法:

  • 卸下在界面生成器(這使得該應用程序以window.rootViewController = nil加載)的RootViewController的連接
  • 在viewDidLoad中的主控制器(在這就是一個被加載兩次),然後我手動分配appDelegate.window.rootViewController = self

到目前爲止,這似乎具有預期的效果。

0

您是否設置了視圖控制器的視圖?我有同樣的問題,我意識到,我沒有設置視圖屬性。

- (void)viewDidLoad { 
    UIView *contentView = [[UIView alloc] initWithFrame: [[UIScreen mainScreen] applicationFrame]; 
    //add some stuff to contentView here 
    self.view = contentView; 
    [contentView release]; 
} 
0

我有同樣的問題。我解決了它。它發生在您的應用程序內存確實收到內存警告時。

將一個斷點放到memoryDidReceiveWarning中。它被調用,並清除你的類對象的內存。所以你的viewDidLoad被調用了兩次,因爲它當時沒有內存。