Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/37.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone 从NSThread调用方法_Iphone_Ios_Ios5_Methods_Nsthread - Fatal编程技术网

Iphone 从NSThread调用方法

Iphone 从NSThread调用方法,iphone,ios,ios5,methods,nsthread,Iphone,Ios,Ios5,Methods,Nsthread,我试图在我的应用程序中调用一个类方法:didFinishLaunchingWithOptions:使用NSThread。但奇怪的是,这个方法没有被调用。我在didFinishLaunchingWithOptions方法中尝试了以下方法 [self performSelector:@selector(parseAdContent) onThread:myThread withObject:AdvertisementView waitUntilDone:NO]; [myThread st

我试图在我的应用程序中调用一个类方法:didFinishLaunchingWithOptions:使用NSThread。但奇怪的是,这个方法没有被调用。我在didFinishLaunchingWithOptions方法中尝试了以下方法

[self performSelector:@selector(parseAdContent) onThread:myThread withObject:AdvertisementView waitUntilDone:NO];
      [myThread start];

请帮助我。

这是创建单独线程的方式:

[NSThread detachNewThreadSelector:@selector(yourSelector:) toTarget:yourTarget withObject:objectYouWishToPassAsParameter];
您指定的选择器将在新线程上自动执行

代码的特定示例:

[NSThread detachNewThreadSelector:@selector(parseAdContent:) toTarget:self withObject:AdvertisementView];
您的线程选择器应该如下所示:

- (void)parseAdContent:(id)obj {
    NSAutoreleasePool *threadPool = [[NSAutoreleasePool alloc] init];
    // Your background thread code here

    [pool drain];
}

以下是创建单独线程的方式:

[NSThread detachNewThreadSelector:@selector(yourSelector:) toTarget:yourTarget withObject:objectYouWishToPassAsParameter];
您指定的选择器将在新线程上自动执行

代码的特定示例:

[NSThread detachNewThreadSelector:@selector(parseAdContent:) toTarget:self withObject:AdvertisementView];
您的线程选择器应该如下所示:

- (void)parseAdContent:(id)obj {
    NSAutoreleasePool *threadPool = [[NSAutoreleasePool alloc] init];
    // Your background thread code here

    [pool drain];
}

您希望调用类方法,但此调用正在尝试调用self的-parseAdContent:。我不知道调用的是什么类,但无论如何,这里的目标是实例变量self,而不是类。像这样的东西可能更适合你

[myThread initWithTarget:[self class] selector:@selector(parseAdContent) object:AdvertisementView];
编辑:因此,如果该方法是Adview类中的类方法,只需将目标更改为Adview类

[myThread initWithTarget:[Adview class] selector:@selector(parseAdContent) object:AdvertisementView];
但是如果它是Adview类中的实例方法,那么目标将是Adview-AdvertisementView类型变量的实例,对吗

[myThread initWithTarget:AdvertisementView selector:@selector(parseAdContent) object:AdvertisementView];
但这没有意义,您不会调用实例方法并将实例作为参数传递给它自己的方法。。。目标是要为其调用选择器的对象。object:参数用于选择器的参数


我假设这是一个类方法,如您最初所述,在这种情况下,这两个调用中的第一个应该可以工作。

您希望调用一个类方法,但此调用试图调用self的-parseAdContent:。我不知道调用的是什么类,但无论如何,这里的目标是实例变量self,而不是类。像这样的东西可能更适合你

[myThread initWithTarget:[self class] selector:@selector(parseAdContent) object:AdvertisementView];
编辑:因此,如果该方法是Adview类中的类方法,只需将目标更改为Adview类

[myThread initWithTarget:[Adview class] selector:@selector(parseAdContent) object:AdvertisementView];
但是如果它是Adview类中的实例方法,那么目标将是Adview-AdvertisementView类型变量的实例,对吗

[myThread initWithTarget:AdvertisementView selector:@selector(parseAdContent) object:AdvertisementView];
但这没有意义,您不会调用实例方法并将实例作为参数传递给它自己的方法。。。目标是要为其调用选择器的对象。object:参数用于选择器的参数



我假设这是一个类方法,如您最初所述,在这种情况下,这两个调用中的第一个应该可以工作。

OP说他正在尝试调用一个类方法。目标不应该是[自我类]?@tronbabbylove谢谢你的回复,但我没有得到预期的结果。Target不能是self或self类,这是因为我在另一个名为Adview的类中有一个方法,其中advisementview是applicationDelgate类中该类的实例变量。还要帮忙吗please@user1188275它位于Adview类中——那么它是类方法还是实例方法呢?对于我上面使用的方法示例(-(void)parseAdContent:(id)obj),目标是self,而不是[self class]。如果要使用静态方法(ex:+(id)someMethod:(id)param),那么目标实际上是[self class]。我的例子应该有足够的描述性]OP说他试图调用一个类方法。目标不应该是[自我类]?@tronbabbylove谢谢你的回复,但我没有得到预期的结果。Target不能是self或self类,这是因为我在另一个名为Adview的类中有一个方法,其中advisementview是applicationDelgate类中该类的实例变量。还要帮忙吗please@user1188275它位于Adview类中——那么它是类方法还是实例方法呢?对于我上面使用的方法示例(-(void)parseAdContent:(id)obj),目标是self,而不是[self class]。如果要使用静态方法(ex:+(id)someMethod:(id)param),那么目标实际上是[self class]。我的示例应该具有足够的描述性]我尝试了您的两个示例,使我的方法成为类和实例方法,但执行周期不会通过该方法。我完全迷路了。在过去的两天里,这个问题已经解决了!!。谢谢您的回复。@user1188275我注意到的另一件事是您正在向方法(AdvertisementView)传递一个参数,但是您没有在选择器标记中包含“:”。它应该是“selector:(parseAdContent:)”我认为添加冒号会使它成为一个完全不同的选择器-尝试添加冒号,看看它是否会改变任何内容。@user1188275另一个注意事项-根据Apple文档,“选择器必须只接受一个参数,并且不能有返回值。”因此,请确保parseAdContent没有返回任何内容。我尝试了您的两个示例,将我的方法设置为class和instance方法,但执行周期不会通过该方法。我完全迷路了。在过去的两天里,这个问题已经解决了!!。谢谢您的回复。@user1188275我注意到的另一件事是您正在向方法(AdvertisementView)传递一个参数,但是您没有在选择器标记中包含“:”。它应该是“selector:(parseAdContent:)”我认为添加冒号会使它成为一个完全不同的选择器-尝试添加冒号,看看它是否会改变任何内容。@user1188275另一个注意事项-根据Apple文档,“选择器必须只接受一个参数,并且不能有返回值。”因此,请确保parseAdContent没有返回任何内容。确保此方法在同一个类中。是否要在主线程中调用它?AdvertisementView是类还是类的实例?我不想在主线程中调用它。要在后台执行此过程。@类@tronbabbyloveyes的Saad实例在同一个类中。任何其他帮助都将不胜感激。确保此方法在同一个类中。是否要在主线程中调用它?AdvertisementView是类还是类的实例?我不想在主线程中调用它。广域网