Objective-c使用线程原因:target没有实现选择器

时间:2011-02-03 09:38:41

标签: objective-c

由于我是ObjC的新手,我坚持以下问题:

我有一个函数downloadFile

-(void) downloadFile:(NSMutableArray*)paramArray withDict:(NSMutableDictionary*)options      
{
    //do stuff
}

我想以线程开头,因此我使用这行代码:

NSThread* dLoad = [[NSThread alloc] initWithTarget:self selector:@selector(downloadFile:) object:nil];
[dLoad start];  

它引发了以下错误:

 *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '*** -[NSThread initWithTarget:selector:object:]: target does not implement selector (*** -[LaunchDownload downloadFile:])'

我在这里错过了什么?

2 个答案:

答案 0 :(得分:9)

我相信你没有为你的线程提供足够的参数。您实施的方法具有签名downloadFile:withDict:,但您只提供downloadFile:。你应该给它正确的选择器名称。

请记住,无论如何您可能会遇到麻烦 - NSThread class reference指定您以这种方式调用的方法必须只接受一个参数。我建议将你的两个参数转换为你的方法解析出来的单个NSDictionary,或者重新思考你如何调度这个线程。

答案 1 :(得分:3)

方法名称为downloadFile:withDict:,而不是downloadFile :.