2011-09-14 22 views
0

私はNSTimerを使ってループを作るアプリケーションを作っています。アプリが起動するとviewDidAppearにある特定の値がNSUserDefaultsに設定されているかどうかを確認し、そうでなければUIAlertViewUITextViewと表示します。ここまですべてOKです。ユーザーは、ユーザーのデフォルト値を設定すると、アラートビューのalertView:clickedButtonAtIndex:は、タイマーの作業を行いvoidを呼び出します。NSTimerの奇妙なエラー

- (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を取得します(あなたがスーパービューを呼び出さないと、これが起こることがわかります)

+0

を却下した後setUpのボイドを呼び出すときNSTimer:scheduledTimerWith ...メッセージはタイマーを自動スケジュールし、コードの行を保存し、保存されたコードの行はすべて... ...とにかくカーボンフットプリントをオフセットします。 – AndrewS

答えて

0

duh、問題が見つかりました。ユーザデフォルトがその鍵を持っていなかったとき、私は、アプリ起動時に設定された変数valを使用していた、そしてそれが空であった:/ので、私だけでした:NSString *userhost = [standardUserDefaults objectForKey:@"host"];もアラートビュー

0

あなたは[table reloadData]を呼び出していますか?あなた自身の内部関数をtableviewのメッセージと同じ名前にしたのは奇妙です。

+0

私は '[self.tableView reloadData]'と呼ぶデータをテーブルビューにリロードし、私の関数は '[self reloadData]'です。それが問題になることがあれば、私はそれらを変更することができます – pmerino

+0

いいえ、問題はなく、まれです。 – AndrewS