Связанные с executeSelector
Я новичок в приложении для iPhone. Я хочу показывать сообщение каждые 2 секунды при нажатии кнопки. Для этого я использую этот код.
Этот код работает только один раз. Это означает, что звонить только один раз. Можете ли вы помочь мне решить эту проблему.
-(IBAction)fortunecookieAction:(id)sender
{
[self performSelector:@selector(showfortune) withObject:nil afterDelay:2.0];
}
-(void)showfortune
{
int number=arc4random()%5;
switch (number) {
case 0:
fortunelabel.text=@"A holiday takes you back to the summer of '69";
break;
case 1:
fortunelabel.text=@"A meal turns erotic muffin";
break;
case 2:
fortunelabel.text=@"A massage brings";
break;
case 3:
fortunelabel.text=@"A letter in the pa special delivery";
break;
case 4:
fortunelabel.text=@"A spillage tuoo";
break;
default:
break;
}
}
2 ответа
Если вы хотите вызывать эту функцию каждые 2 секунды, используйте NSTimer.
Тебе понадобится scheduledTimerWithTimeInterval:target:selector:userInfo:repeats:
для создания запланированного таймера
Ваш лучший выбор, вероятно, использовать NSTimer
, Вы можете настроить его так, чтобы он вызывал метод действия каждые две секунды очень легко:
В вашем интерфейсе (MyViewController.h
), объявите свойство NSTimer:
@interface MyViewController : UIViewController
@property (nonatomic, retain) NSTimer *myTimer;
@end
И тогда в вашей реализации:
@synthesize myTimer;
- (void)viewDidLoad
{
[super viewDidLoad];
NSTimer *newTimer = [NSTimer scheduledTimerWithTimeInterval:2.0f target:self selector:@selector(repeatingTimerFired:) userInfo:nil repeats:YES];
self.myTimer = newTimer;
[newTimer release];
}
- (void)viewDidUnload
{
[super viewDidUnload];
if ([myTimer isValid]) {
[myTimer invalidate];
}
}
- (void)dealloc
{
[myTimer release], myTimer = nil;
[super dealloc];
}
- (void)repeatingTimerFired:(NSTimer *)sender
{
int number=arc4random()%5;
switch (number) {
case 0:
fortunelabel.text=@"A holiday takes you back to the summer of '69";
break;
case 1:
fortunelabel.text=@"A meal turns erotic muffin";
break;
case 2:
fortunelabel.text=@"A massage brings d";
break;
case 3:
fortunelabel.text=@"A letter in the pa special delivery";
break;
case 4:
fortunelabel.text=@"A spillage tuoo";
break;
default:
break;
}
Если вы хотите, чтобы этот таймер начал отображать сообщения после того, как пользователь нажимает кнопку, просто переместите создание таймера в метод действия кнопки.