如何在手机sdks中实现NSTimer?

时间:2011-12-15 10:53:49

标签: iphone

我想在我的应用中实现计时器功能。我知道如何在iOS中实现计时器,但在我看来这很难,我有一个包含UITableview单元格中某些值的字符串(如“红色,蓝色,绿色,紫色”)。这些是逗号分隔,我想在计时器的帮助下设置条件。我的需求是我希望将这些值分享给GoogleDoc,单个上传成功,但我无法进行多次上传,所以我的想法是使用计时器在固定的时间逐个上传这些值:

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

我想设置条件,如果红色是默认值,那么我们不想设置计时器,2秒后必须上传蓝色,然后2秒后绿色,就像所有。那么如何在“myMethod”中为此设置条件?

这是我的上传代码包含字符串“str”(str包含移动值):

- (IBAction)doUpload:(id)sender
{

   NSMutableString *str = [[NSMutableString alloc] initWithString:@"NOTES:"]; 
    for (int i = 0; i<[appDelegate.notesArray count]; i++) { 
        UploadView *uploadview = (UploadView *)self.view; 
        if (uploadview != nil) 
        { 
            NSString * aString = [[NSString alloc] initWithString:[appDelegate.notesArray objectAtIndex:i]] ;
            [m_owner uploadString:aString]; 
        } 
        if (selected[i]) 
            [str appendFormat:@"%@ ,",[appDelegate.notesArray objectAtIndex:i]];
}

请帮我这样做。提前致谢。 编辑:

- (IBAction)doUpload:(id)sender
{

   NSMutableString *str = [[NSMutableString alloc] initWithString:@"NOTES:"]; 
    for (int i = 0; i<[appDelegate.notesArray count]; i++) { 
        UploadView *uploadview = (UploadView *)self.view; 
        if (uploadview != nil) 
        { 
            NSString * aString = [[NSString alloc] initWithString:[appDelegate.notesArray objectAtIndex:i]] ;
            //[m_owner uploadString:aString]; 
             [m_owner performSelector:@selector(uploadString:) withObject:aString afterDelay:i*20];
        } 
        if (selected[i]) 
            [str appendFormat:@"%@ ,",[appDelegate.notesArray objectAtIndex:i]]; 
        UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Selected Values" message:str delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil];
        [alert show];
        [alert release];

    }


}

1 个答案:

答案 0 :(得分:3)

您可以使用NSObject的方法:


- (void)performSelector:(SEL)aSelector withObject:(id)anArgument afterDelay:(NSTimeInterval)delay

所以在你的代码中你可以这样做:


[m_owner performSelector:@selector(uploadString:) withObject:aString afterDelay:i*2];

将在每次通话时安排2i延迟(0,2,4,6,...)。

此对象为您设置了计时器。当然,所有方法都将同时安排,然后它们将以每秒两秒的延迟运行。当然,在网络延迟较高的情况下,有效上传可能会发生不同的延迟,而谷歌可能会拒绝它。在这种情况下,最好的工作方式是上传,然后安排下一个等等......