Нстимер с методом, который имеет переменную - PullRequest
2 голосов
/ 29 декабря 2010

У меня есть метод с входной переменной, и мне нужно запланировать этот метод, используя NSTimer К сожалению, когда я пытаюсь составить идею, у меня возникает какая-то ошибка. Мой код следующий:

Мой метод:

-(void)movelabel:(UILabel *)label {
}

Я планирую, используя следующее:

[NSTimer scheduledTimerWithTimeInterval:0.1 target:self selector:@selector(movelabel:myLbabeName) userInfo:nil repeats:YES];

Но я получил следующую ошибку:

error: expected ':' before ')' token

В другом случае (случай метода безвходная переменная я вызываю таймер следующим образом:

[NSTimer scheduledTimerWithTimeInterval:0.1 target:self selector:@selector(myMethodNameWithoutVariable) userInfo:nil repeats:YES];

С уважением

Ответы [ 3 ]

2 голосов
/ 29 декабря 2010

Селектор, который вы указываете scheduledTimerWithTimeInterval:target:selector:userInfo:repeats:, не принимает произвольных аргументов. Это должен быть либо селектор без параметра, либо селектор с одним параметром типа (NSTimer *).

Это означает, что вы не можете напрямую вызвать moveLabel: со своим параметром myLbabeName.

Вы можете использовать словарь userInfo с промежуточным методом, подобным этому:

(timerRef - переменная класса NSTimer)

timerRef = [NSTimer scheduledTimerWithTimeInterval:0.1 
                               target:self 
                               selector:@selector(timerMovelabel:) 
                               userInfo:[NSDictionary dictionaryWithObject:myLbabeName 
                                                                    forKey:@"name"]
                                repeats:YES];

и

- (void)timerMovelabel:(NSTimer *)timer {
    [self movelabel:[[timer userInfo] objectForKey:@"name"]];
}

EDIT

Если вы хотите остановить таймер, сохраните ссылку на него и позвоните [timerRef invalidate]

0 голосов
/ 29 декабря 2010

Вы не можете передать свой ярлык как параметр с помощью селектора ... Должен быть либо один параметр, который будет идентификатором, либо нет параметра ..

здесь вы должны использовать

[NSTimer scheduledTimerWithTimeInterval:0.1 target:self selector:@selector(movelabel:) userInfo:nil repeats:YES]; 

или

[NSTimer scheduledTimerWithTimeInterval:0.1 target:self selector:@selector(movelabel) userInfo:nil repeats:YES]; 

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

- (void) moveLable :(id)sender {
}

отправитель будет таймером.

В любом случае, почему вам нужен ваш ярлык в качестве параметра.вы можете получить прямой доступ к своей метке, если объявите ее в файле .h.

0 голосов
/ 29 декабря 2010

Вам необходимо добавить ':' после параметра, т.е.

[NSTimer scheduledTimerWithTimeInterval:0.1 target:self selector:@selector(movelabel:myLbabeName:) userInfo:nil repeats:YES]; 
...