2012-07-10 51 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

相关问题