【发布时间】:2011-09-14 16:27:53
【问题描述】:
我正在制作一个使用NSTimer 进行循环的应用程序。当应用程序启动时,在viewDidAppear 中,我检查是否设置了NSUserDefaults 中的某个值,如果不是,我向用户显示UIAlertView 和UITextView。直到这里一切都好。一旦用户设置了用户默认值,警报视图的alertView:clickedButtonAtIndex: 就会调用void 使计时器工作:
- (void)alertView:(UIAlertView *)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex
{
[standardUserDefaults setObject:nameField.text forKey:@"host"];
[standardUserDefaults synchronize];
[self setUp];
NSLog(@"called");
}
这是[self setUp];
-(void)setUp {
timer = [NSTimer timerWithTimeInterval: 1 target: self selector: @selector(reloadData) userInfo: nil repeats: YES];
[[NSRunLoop mainRunLoop] addTimer: timer forMode: NSDefaultRunLoopMode];
[self reloadData];
self.host = [self getHostName:val];
self.ip = [self getHostIP:val];
NSLog(@"reached here"); //THIS GETS CALLED SO I THINK IT WORKS
}
这是[self reloadData]:
- (void)reloadData {
NSArray *words = nil;
words = [[self getUptime] componentsSeparatedByCharactersInSet:[NSCharacterSet whitespaceCharacterSet]];
//int sum = [[words objectAtIndex:0] intValue] / 100.0;
float sum1 = ([[words objectAtIndex:0] floatValue] / 10.0);
NSLog(@"%f", sum1);
[bar1 setProgress:sum1];
load1.text = [NSString stringWithFormat:@"%f", [bar1 progress]];
float sum2 = ([[words objectAtIndex:1] floatValue] / 10.0);
NSLog(@"%f", sum2);
[bar2 setProgress:sum2];
load2.text = [NSString stringWithFormat:@"%f", [bar2 progress]];
float sum3 = ([[words objectAtIndex:2] floatValue] / 10.0);
NSLog(@"%f", sum3);
[bar3 setProgress:sum3];
load3.text = [NSString stringWithFormat:@"%f", [bar3 progress]];
}
问题是 tableView 单元格没有获取值并保持白色,但是如果您关闭应用程序并再次加载它(当它在用户默认值中有变量时),事情就完美了,所以我不知道会发生什么。我也经常在日志中得到wait_fences: failed to receive reply: 10004003(我知道当你不调用superview时会发生这种情况)
【问题讨论】:
-
还有 NSTimer:scheduledTimerWith... 消息会自动安排一个计时器,节省一行代码,并且保存的每一行代码都是......呃,抵消你的碳足迹......呃......无论如何。
标签: ios cocoa-touch nstimer void