簡體   English   中英

應用程序卡在 iOS 9 上的啟動畫面中,沒有錯誤

[英]App stuck in splash screen on iOS 9 with no error

我的應用程序在 iPhone 和模擬器上的 iOS 9 啟動畫面上都卡住了。 我可以在 iOS 8 或更低版本的設備和模擬器上運行它,沒有問題。 我在同一個應用程序上工作的同事遇到了完全相同的問題。

沒有錯誤或任何東西,只是掛在啟動畫面上。 如果我在 xcode 上停止它並嘗試直接從手機或模擬器運行它,它會毫無問題地運行。

順便說一句,我沒有看到didFinishLaunchingWithOptionswillFinishLaunchingWithOptions被調用!

在此處輸入圖片說明

在您的“答案”中,您包含以下代碼:

+(void)initialize
{

   titles = @[NSLocalizedString(@"CODE", nil), NSLocalizedString(@"ERROR", nil), NSLocalizedString(@"TROUBLESHOOTING", nil)];
}

這確實是您問題的根源。 在實現+load+initialize時非常小心是明智的。 @bbum 有一篇關於該主題的精彩文章

+initialize在第一次接觸類(或類別)時被調用 - 當類被初始化時+initialize被類加載機制調用。 無法保證在類加載過程中何時會發生這種情況,這是您的問題的一部分。

在您的情況下,您使用的是NSLocalizedString - 它在引擎蓋下可能相當沉重。 它依賴於其他幾個類( NSString等)並且可以潛在地訪問文件系統。 正如@bbum 在他的文章中指出的那樣,這可能會導致嚴重的麻煩。 在您的情況下,這可能是一個令人討厭的僵局。

將您的titles = @[NSLocalizedString...行移動到對象中更合適的位置,例如初始化程序、awakeAfterUsingCoder: 等,您的當前問題應該得到解決。 這樣做之后,您應該檢查您的整個代碼庫中實現+initialize+load實例,並審核它們以確保這些使用符合@bbum 的建議。

好的,我發現了問題。 雖然聽起來很可笑!!

我正在使用UITabBarController並且在第一個控制器中我有一個帶有自定義數據源類的UITableViewController它將啟動一個硬代碼表頭,並且這些頭是本地化的!!

+ (void)initialize {
    titles = @[NSLocalizedString(@"CODE", nil), NSLocalizedString(@"ERROR", nil), NSLocalizedString(@"TROUBLESHOOTING", nil)];
}

在我跟蹤堆棧之后,我意識到這個過程卡在那里,沒有任何跟蹤和錯誤! 我還是不知道為什么!

所以我想出了一個解決方法:

+ (void)initialize {
    titles = @[@"Code",@"Error",@"Troubleshooting"];
}

並且僅在返回文本時檢索本地化值:

- (NSString *)titleAt:(NSInteger)index {
    return NSLocalizedString(titles[index],nil);
}

好的,我想我找到了答案。

您必須在所有“有效架構”中指定 arm64。 如果您沒有指定 arm64 或忘記了一個應用程序將不會啟動並停留在啟動畫面上。

剛剛驗證了這一點。

這是 Xcode 7 的錯誤嗎?

我將調試和發布都設置為 NO 您確定“任何 SDK”也有 arm64?

我有同樣的問題通過pod update更新了我的pod update ,它對我有用

暫無
暫無

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

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