2012-07-10 67 views
1

我有一些基本的疑問,猜猜別人會幫我。performSelectorOnMainThread通知

請參考這個問題:Update ULabel immediately while downloading files

我一直在使用performSelectorOnMainThread,這是調用另一大類的UpdateProgress方法,但標籤沒有更新嘗試。

但現在我已經使用像

[[NSNotificationCenter defaultCenter] postNotificationName:@"updateProgress" object:nil userInfo:nil]; 

通知,這似乎是調用方法,並且還更新的UILabel。儘管我的問題已解決,但我想知道爲什麼上述performSelectorOnMainThread對我沒有幫助?任何具體原因?

+0

它應該工作。你能在這裏發佈一些代碼嗎?你必須從某個線程和選擇器調用performSelectorOnMainThread我假設你正在調用像[someOtherClassObj updateProgress];並注意,你必須從主線程調用postNotificationName,所以我想知道你是如何調用它 – msk 2012-07-10 11:32:17

+0

我傾向於使用[performSelectorOnMainThread ... waitUntilDone:NO];而不是「waitUntilDone:YES」;其中一條評論也提到了這一點。我注意到有時會設置爲「waitUntilDone:YES」;導致界面不更新。您是否嘗試將其設置爲「否」而不是「是」? – Zhang 2012-07-10 11:38:20

回答

0

performSelectorOnMainThread可用於在主線程中運行一些代碼。它似乎不是一種在另一個類上調用方法的方法(即使您可以使用此方法在另一個類上調用該方法(如果您有該類的實例)。如果您在其中一個類中使用API​​調用,則可能需要使用單獨的線程來執行API調用,因爲它會阻止主線程(對於使用您的應用程序的用戶來說它不是那種類型)。所以在ios中,你只能從主線程調用UIKit。

NSNotification用於獲取事件調用。我的意思是,當發生註冊觀察員得到通知的特定事件時,它通知觀察者。

希望這可以幫助你。

+0

因此,我有一個類A和B.我試圖通過調用A FROM B類中的方法來更改標籤文本。它不起作用。但是,如果我從B發送通知給A,標籤正在改變。怎麼來的 ? – Perseus 2012-07-10 11:36:56

+0

就你的情況而言,如果你有一個類A,並且你從另一個類B中推入了另一個類。如果B包含與B相同的實例A,那麼可以使用B中A的實例在B上調用A上的實例。 – 2012-07-10 11:44:41

1

您需要將performSelectorOnMainThread調用方法和updateProgress方法放在同一個類中。如果沒有,(在你的情況下),在類中創建一個方法performSelectorOnMainThread被調用並將其重定向到另一個類的updateProgress

相關問題