未捕获的异常'NSInvalidArgumentException' - >目标C.

时间:2011-05-23 07:15:16

标签: objective-c

我正在尝试从谷歌的示例线程程序,我得到一个运行时异常。

是否有任何网站提供了如何使用runloops和线程的示例。 我需要设置两个事件并生成一个线程并并行执行另一个函数。

// Runner.m

#import "Runner.h"

@implementation Runner

    - (void)rumMe:(id)ignored {

        NSLog(@"Running with threads!!");
    }

@end

// Runner.h

@interface Runner : NSObject

    -(void)rumMe:(id)ignored;

@end

// Thread1.m

#import <Foundation/Foundation.h>
#import "Runner.h"

int main (int argc, const char * argv[]) {

    NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
    Runner* runner = [Runner new]; 
    [NSThread detachNewThreadSelector:@selector(runMe:) toTarget:runner withObject:nil];
    [pool drain];
    return 0;
}

运行时异常:

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

2 个答案:

答案 0 :(得分:2)

第一部分:你有一个错字

// method declaration
rumMe:   with an _m_
// call
runMe:   with an _n_

第二部分:你的主要功能是返回并导致程序退出,然后你就让线程有机会做任何事情。在这个简单的简单示例中,您可以简单地

sleep(2);
在致电detachNewThreadSelector:

之后

在更复杂的情况下,您可能需要在主线程上调用CFRunLoopRun();,或采取其他操作来保持第二个线程处于活动状态。

答案 1 :(得分:1)

你犯了一个错字。 Runner中的方法定义为rumMe,但在主程序中使用runMe