получение объекта, переданного в селектор NSThread - PullRequest
0 голосов
/ 15 марта 2011

Когда я создаю NSThread, я передаю ему число, о котором я хочу, чтобы процесс знал.Я могу понять, как установить число, но не могу понять, как считать число из метода селектора потоков, чтобы затем передать его таймеру.

Как вы это делаете?

-(void) setthread
{ 

// здесь передается число селектору отлично

NSThread* timerThread = [[NSThread alloc] initWithTarget:self selector:@selector(startTimerThread) object:[NSNumber numberWithInt:index]];/
    [timerThread setThreadPriority:0.5];
    [timerThread start]; //start the thread 

}

// не получается прочитать значение, переданное этому селектору

-(void) startTimerThread
{


    NSAutoreleasePool* pool = [[NSAutoreleasePool alloc] init];
    NSRunLoop* runLoop = [NSRunLoop currentRunLoop];
    [[NSTimer scheduledTimerWithTimeInterval: 0.1
                                      target: self
                                    selector: @selector(timerTick:)
                                    userInfo: thenumberhere
                                     repeats: YES] retain];

    [runLoop run];
    [pool release];
}

- (void)timerTick:(NSTimer *)timer
{
    //code
}

Ответы [ 2 ]

4 голосов
/ 15 марта 2011

Вы неправильно указали свой селектор:

@selector(startTimerThread)   // we are missing ':' at the end

В конце должно быть :, например:

@selector(startTimerThread:) 

Это указывает на то, что это селектор, который принимает один параметр.

Затем примите параметр в вашем startTimerThread методе:

-(void) startTimerThread:(NSNumber *)myNumber {
    // ... etc
0 голосов
/ 15 марта 2011

это не сработает .. это будет:

NSThread* timerThread = [[NSThread alloc] initWithTarget:self selector:@selector(startTimerThread:) object:[NSNumber numberWithInt:index]];


-(void) startTimerThread:(NSNumber *)thenumberhere
{


    NSAutoreleasePool* pool = [[NSAutoreleasePool alloc] init];
    NSRunLoop* runLoop = [NSRunLoop currentRunLoop];
    [[NSTimer scheduledTimerWithTimeInterval: 0.1
                                      target: self
                                    selector: @selector(timerTick:)
                                    userInfo: thenumberhere
                                     repeats: YES] retain];

    [runLoop run];
    [pool release];
}

вы «забыли» добавить объект, который вы передаете вместе с селектором в качестве параметра, в метод, который вы реализовали.

...