【问题标题】:Strange error with NSTimer (I believe)NSTimer 的奇怪错误(我相信)
【发布时间】:2011-09-14 16:27:53
【问题描述】:

我正在制作一个使用NSTimer 进行循环的应用程序。当应用程序启动时,在viewDidAppear 中,我检查是否设置了NSUserDefaults 中的某个值,如果不是,我向用户显示UIAlertViewUITextView。直到这里一切都好。一旦用户设置了用户默认值,警报视图的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


【解决方案1】:

你调用 [table reloadData] 吗?奇怪的是,您将自己的内部函数命名为与 tableview 的消息相同。

【讨论】:

  • 当我希望表格视图重新加载我调用[self.tableView reloadData] 的数据时,我的函数是[self reloadData]。我可以改变它们,如果这可能是一个问题
  • 不,不是问题,只是不寻常。
【解决方案2】:

呃,我发现了问题。我正在使用在应用程序启动时设置的变量val,当用户默认没有那个键时它是空的:/所以我只是这样做了:NSString *userhost = [standardUserDefaults objectForKey:@"host"]; 在解除警报后调用setUp void查看

【讨论】:

    猜你喜欢
    • 2015-05-10
    • 2012-05-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-27
    相关资源
    最近更新 更多