Странная ошибка с NSTimer (я считаю) - PullRequest
0 голосов
/ 14 сентября 2011

Я создаю приложение, в котором я использую 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 в журнале (я знаю, что это происходит, когда вы не вызываете суперпредставление)

Ответы [ 2 ]

0 голосов
/ 14 сентября 2011

Дух, я нашел проблему.Я использовал переменную val, которая была установлена ​​при запуске приложения, и она была пустой, когда пользовательские значения по умолчанию не имели этого ключа: / поэтому я просто сделал: NSString *userhost = [standardUserDefaults objectForKey:@"host"]; при вызове setUp void после отмены предупреждениявид

0 голосов
/ 14 сентября 2011

Вы называете [таблица reloadData]? Странно, что вы назвали свою собственную внутреннюю функцию такой же, как в сообщении таблицы.

...