我想在我的应用中实现计时器功能。我知道如何在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];
}
}
答案 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,...)。
此对象为您设置了计时器。当然,所有方法都将同时安排,然后它们将以每秒两秒的延迟运行。当然,在网络延迟较高的情况下,有效上传可能会发生不同的延迟,而谷歌可能会拒绝它。在这种情况下,最好的工作方式是上传,然后安排下一个等等......