簡體   English   中英

iPhone 3G/iPod 2G 上的奇怪崩潰

[英]Strange Crash on iPhone 3G/iPod 2G

我真的在一個奇怪的問題上撞我的頭。 我的應用程序的一些用戶報告說應用程序無法啟動,但在顯示啟動屏幕 2 秒后崩潰。 這只發生在較舊的 iPod 2G/iPhone 3G 上。 拿到設備后,如果發生這種情況,我試圖追蹤它。

調試代碼不會發生崩潰,而只會在發布版本中發生。 在崩潰發生之前,我的代碼根本不會執行。 一些 UIViewControllers 在我的 AppDelegate 中初始化,無論我在這里選擇什么順序,它們中的第一個在運行 initWithNibName 后都會失敗,這對於所有控制器都是相同的,並為通用應用程序處理正確 XIB 的加載:

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil {
  if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) {
    NSString *ipadXib = [NSString stringWithFormat:@"%@-iPad", [[self class] description]];
    return [super initWithNibName:ipadXib bundle:nibBundleOrNil];
  } else {
    return [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
  }
}

這段代碼運行良好,但是從這里返回時,我最終在 UIKit(不是我的代碼)的某個地方出現 SIGBUS 錯誤。 我懷疑上面的編碼,因為當我根本不覆蓋 initWithNibName (這對於 iPhone 版本是可以的)時,完整的代碼會運行。 如果我只是在這里調用 [super...] 它也可以工作,但是我懷疑編譯器會簡單地優化它,與根本不覆蓋它具有相同的效果。 由於 InterfaceIdiom 不是 iPad,因此僅使用相同的超級功能而無需更改參數,因此應該很容易。 它適用於所有其他設備。 沒有分析儀錯誤,沒有任何泄漏。 它真的發生得太早了,以至於當崩潰發生時,除了上面的代碼之外幾乎沒有任何代碼被調用。 它發生在我將 4 個控制器序列放在首位的任何 controller 上。

有任何想法嗎? 我完全被困住了......

只是想知道他們正在運行什么 iOS? UIUserInterfaceIdiomPad 在 iOS 3.2 及更高版本中可用。

如果是這種情況,您應該檢查此線程How dos one get UI_USER_INTERFACE_IDIOM() to work with iPhone OS SDK < 3.2

經過更多研究(整晚:-(),我發現這只是 XCode 4.0 LLVM 的編譯器問題。XCode 4.0.2 的發行說明顯示,特別是這個編譯器錯誤(阻礙 arm6 架構上的堆棧幀)是現在已修復。安裝 4.0.2 並重新編譯后,現在一切正常。奇怪的是,我收到來自 Apple 的郵件,說我應該購買 iPad 2 作為復活節禮物,或者現在有白色 iPhone,但沒有任何信息大約 2 周前做出的如此重要的修復正在發送給開發人員:-(

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM