Iphone 在通知上执行performSelectorOnMainThread

Iphone 在通知上执行performSelectorOnMainThread,iphone,objective-c,ios,cocoa-touch,nsnotificationcenter,Iphone,Objective C,Ios,Cocoa Touch,Nsnotificationcenter,我有一些基本的疑问,我想有人会帮我的 请参阅以下问题: 我尝试过使用performselectornmainthread,它在另一个类中调用updateProgress方法,但是标签没有更新 但是现在我使用了通知,比如 [[NSNotificationCenter defaultCenter] postNotificationName:@"updateProgress" object:nil userInfo:nil]; 它似乎正在调用该方法并更新UILabel。即使我的问题解决了,我想知道为

我有一些基本的疑问,我想有人会帮我的

请参阅以下问题:

我尝试过使用
performselectornmainthread
,它在另一个类中调用updateProgress方法,但是标签没有更新

但是现在我使用了通知,比如

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

它似乎正在调用该方法并更新UILabel。即使我的问题解决了,我想知道为什么上面的
performSelectorOnMainThread
对我不起作用?有什么具体原因吗?

可以使用
performSelectorOnMainThread
在主线程中运行一些代码。它似乎不是在另一个类上调用方法的方法(即使您可以使用它在另一个类上调用该方法,如果您有该类的工作实例)。如果您在一个类中使用API调用,您可能必须使用单独的线程来执行API调用,因为它会阻止主线程(这对使用您的应用程序的用户不是一种方式)。因此,在ios中,您必须仅从主线程调用UIKit

NSNotification
用于获取事件调用。我的意思是,当某个特定事件发生时,它会通知观测者,观测者将得到通知


希望这对您有所帮助。

可以使用
performSelectorOnMainThread
在主线程中运行一些代码。它似乎不是在另一个类上调用方法的方法(即使您可以使用它在另一个类上调用该方法,如果您有该类的工作实例)。如果您在一个类中使用API调用,您可能必须使用单独的线程来执行API调用,因为它会阻止主线程(这对使用您的应用程序的用户不是一种方式)。因此,在ios中,您必须仅从主线程调用UIKit

NSNotification
用于获取事件调用。我的意思是,当某个特定事件发生时,它会通知观测者,观测者将得到通知


希望这对您有所帮助。

进行
performselectornmainthread
调用的类和
updateProgress
方法需要在同一个类中。如果没有(在您的情况下),请在调用
performSelectorOnMainThread
的类中创建一个方法,并将其重定向到另一个类上的
updateProgress

进行
performselectornmainthread
调用的类和
updateProgress
方法需要在同一个类中。如果没有(在您的情况下),请在调用
performSelectorOnMainThread
的类中创建一个方法,并将其重定向到另一个类上的
updateProgress

它应该会起作用。你能在这里发布一些代码吗?您必须从某个线程调用performSelectorOnMainThread,我假设您从选择器调用类似于[someOtherClassObj updateProgress]的东西;请注意,您必须从主线程调用postNotificationName,所以我想知道您是如何调用它的。我倾向于使用[performSelectorOnMainThread…waitUntilDone:NO];而不是“waitUntilDone:YES”;其中一条评论也提到了这一点。我注意到有时设置为“waituntldone:YES”;导致接口不更新。你试过把它设置为“否”而不是“是”吗?它应该能工作。你能在这里发布一些代码吗?您必须从某个线程调用performSelectorOnMainThread,我假设您从选择器调用类似于[someOtherClassObj updateProgress]的东西;请注意,您必须从主线程调用postNotificationName,所以我想知道您是如何调用它的。我倾向于使用[performSelectorOnMainThread…waitUntilDone:NO];而不是“waitUntilDone:YES”;其中一条评论也提到了这一点。我注意到有时设置为“waituntldone:YES”;导致接口不更新。您是否尝试将其设置为“否”而不是“是”?因此,我有一个类a和B。我试图通过从B类调用a中的方法来更改标签文本。它不起作用。但是如果我从B向A发送通知,标签就会改变。为什么?在你的例子中,如果你有一个类a,你从a推了另一个名为B的类。如果B包含a推B的同一个实例,那么你可以使用B中a的实例从B中调用a上的实例。因此,我有一个类a和B。我试图通过调用a from B类中的方法来更改标签文本。它不起作用。但是如果我从B向A发送通知,标签就会改变。为什么呢?在你的例子中,如果你有一个类a,你从a推了另一个名为B的类。如果B包含推B的a的相同实例,那么你可以使用B中a的实例从B中调用a的实例。