связанные с executeSelector - PullRequest
       12

связанные с executeSelector

0 голосов
/ 15 сентября 2011

Я новичок в приложении для 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 ]

0 голосов
/ 15 сентября 2011

Лучше всего использовать 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;
}

Если вы хотите, чтобы этот таймер начал отображать сообщения после того, как пользователь нажимает кнопку, просто переместите создание таймера в метод действия кнопки.

0 голосов
/ 15 сентября 2011

, если вы хотите вызывать эту функцию каждые 2 секунды, используйте NSTimer .
Вам понадобится scheduledTimerWithTimeInterval:target:selector:userInfo:repeats: для создания запланированного таймера

...