0

我正在嘗試呈現模態vc。但是需要5秒左右的時間n當用戶嘗試點擊按鈕時,延遲看起來很重要,直到他們在屏幕上看到某些東西。PresentModalViewController需要5秒才能調出模態

我的模態視圖有3頁,每頁有6個表作爲子視圖。我沒有使用任何網絡連接。所有表都從本地xml數據加載。

所以,我的問題是 1)有沒有辦法提高加載模態vc的性能? 2)或者我可以顯示一個活動指標,讓視圖加載到後臺線程上,並在加載完成後刪除指標?

我試過選項2.我開始活動指示燈 viewDidLoad中和所有使用 performSelectorInBackground方法的後臺線程的頁面初始化代碼。但是,這使得我的桌子看起來很奇怪,那裏的框架都是扭曲的,寬度被擰得很緊。任何建議都會對你有所幫助。

回答

0

您可以在viewDidAppear上顯示活動指示器,然後在後臺線程中獲取數據,您只需刷新視圖/表格視圖。這種方式模態視圖不會出現5秒或延遲。

+0

這並不能幫助我在笏這樣的方式。在你回答之前,請再次解決問題。我的延遲不是數據獲取的原因,所有數據都在本地xml中。這是我在每個頁面中具有的子視圖數量的最大值。 – Mobilewits

2

從不在後臺線程中顯示或修改界面元素。如果你在後臺線程,你想要做的事在主線程中,你可以使用一個選擇:

[self performSelectorOnMainThread:@selector(doSomething:) 
         withObject:someObject 
        waitUntilDone:NO]; 

,或者您可以使用GCD(我的最愛):

dispatch_async(dispatch_get_main_queue(), ^{ 
    [self doSomething:someObject]; 
}); 

無論您使用哪種方法,只要確保如果您在後臺線程中加載數據,然後嘗試從該後臺線程加載視圖,則始終在主線程上執行該調用,否則您將得到您提到的奇怪行爲。

+0

感謝您的反饋。這爲我解決了一個難題。但是,如果我在我的主線程上執行,負載將會再次延遲,而且我不能顯示活動指標。 – Mobilewits

+0

@jacob:在主線程上執行某些操作不會阻止後臺線程。你需要做的是在後臺線程中執行你的xml解析,然後在完成後會有一個回調,在主線程上啓動模態視圖。 –

+0

延遲不是加載數據,因爲我從本地xml文件加載數據。這主要是我在viewDidLoad上生成和添加的子視圖的數量。 – Mobilewits

相關問題