首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >与performSelector相关

与performSelector相关
EN

Stack Overflow用户
提问于 2011-09-15 18:53:53
回答 2查看 364关注 0票数 0

我是iPhone应用程序的新手。我希望在每2秒按下一个按钮时显示一条消息,表明我正在使用此代码。

这个代码只工作一次。这意味着只调用一次。你能帮我解决这个问题吗?

代码语言:javascript
复制
-(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;  
    }   
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-09-15 19:00:55

如果希望每隔2秒调用一次函数,请使用NSTimer

您将需要scheduledTimerWithTimeInterval:target:selector:userInfo:repeats:来创建计划的计时器

票数 0
EN

Stack Overflow用户

发布于 2011-09-15 19:01:03

您最好的选择可能是使用NSTimer。您可以很容易地将一个设置为每两秒调用一次操作方法:

在接口(MyViewController.h)中,声明一个NSTimer属性:

代码语言:javascript
复制
@interface MyViewController : UIViewController

@property (nonatomic, retain) NSTimer *myTimer;

@end

然后在你的实现中:

代码语言:javascript
复制
@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
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7429657

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档