2014-07-14 41 views
1

我正在研究一個應用程序,我需要在短時間間隔後更新UITextField中的文本。我正在更新字典中的文本和間隔。我正在解析字典並設置UITextField文本,然後等待一秒鐘。定期更新UITextField

- (void)startDisplay{ 
    for (NSDictionary *dictData in [dictTestData valueForKey:@"frames"]) { 
     [_txtFieldDisplay setText:[dictData valueForKey:@"frame"]]; 
     [NSThread sleepUntilDate:[NSDate dateWithTimeIntervalSinceNow:1.0]]; 
     [_txtFieldDisplay setText:@""]; 
    } 
}  

UITextField沒有得到定期更新。它只顯示最後的文本。幫助我。

回答

4

直到當前運行循環有機會完成,文本字段纔會真正更新。你的代碼有兩個問題。

1)你睡在主線程 - 非常糟糕。

2)在更改有機會生效之前重置文本。

GCD將是解決這個的好方法:

- (void)startDisplay { 
    float delay = 0.0; 
    for (NSDictionary *dictData in [dictTestData valueForKey:@"frames"]) { 
     dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(delay * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ 
      [_txtFieldDisplay setText:[dictData valueForKey:@"frame"]]; 
     }); 
     delay += 1.0; 
    } 

    dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(delay * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ 
     [_txtFieldDisplay setText:@""]; 
    }); 
}  

而提到「iMoses」,另一種方法可能是使用一個NSTimer,但需要更多的設置。

+2

資源密集程度較低的方法是使用重複計時器,並且在此之前設置數據以便於訪問。 –

+0

感謝您的快速回復,並指出了我的代碼中的問題,但現在文本字段在循環結束後立即顯示完整文本。我試圖做的是顯示一些文本,然後暫停,然後再顯示一些文本並暫停,直到字典完全解析。 –

+0

@Deepesh好的,我誤解了。給我幾分鐘更新。這仍然是一個基本的想法。 – rmaddy