Как передать объект NSTimeInterval в detachNewThreadSelector с параметромObject? - PullRequest
2 голосов
/ 20 июня 2010

Я все еще новичок в синтаксисе Objective C, поэтому, возможно, я слишком усложняю это, но не могу понять, как передать NSTimeInterval потоку.

Я хочу запустить поток, который спит в течение параметра x секунд, отправленного из основного потока, следующим образом:

[NSThread detachNewThreadSelector:@selector(StartServerSynchThread) toTarget:self withObject:5];

- (void) StartServerSynchThread:(NSTimeInterval *)sleepSecondsInterval {

    [NSThread sleepForTimeInterval:sleepSecondsInterval];

}

Но компилятор продолжает выдавать мне синтаксическую ошибку. Я не уверен, как именно это должно быть сделано. Любая помощь будет оценена. Спасибо!

Ответы [ 2 ]

12 голосов
/ 20 июня 2010

Это почти точно так же, как ответ @ Georg, но с использованием правильных типов.:)

Если вы поместите NSTimeInterval в NSNumber (подкласс NSValue), вы можете передать это вместо:

[NSThread detachNewThreadSelector:@selector(startServerSynchThread:) 
                         toTarget:self 
                       withObject:[NSNumber numberWithDouble:myTimeInterval]];

- (void) startServerSynchThread:(NSNumber *)interval {
  [NSThread sleepForTimeInterval:[interval doubleValue]];
}
2 голосов
/ 20 июня 2010

Параметр object имеет тип id, что означает, что могут передаваться только объекты типа класса.Целые числа, такие как 5, который вы пытаетесь передать, а также NSTimeInterval (на самом деле просто typedef для double) - это фундаментальные типы, а не типы классов.NSNumber в качестве обертки или вместо NSDate.

...