我有这样的情况: 我从 API 获取数据,这些数据很快就会出现。当我将它们推送到 NSLogs 中时,一旦我请求它们就在那里。之后,我解析它们(从 JSON)并尝试设置 UILabel 或 UIImageView 等控件(如果是图像)。我想我检查了数据推送到最后一点的时间延迟 - 我的意思是我试图在方法中获取 NSLog,在其中获取数据,在其中解析等,最后在 UILabel 的子类中的方法 setText 中。
有什么问题? NSLogs 中的内容很快就会出现,但 UI 中的内容会在... 10-20 秒后更新。 !!可能是什么原因?
一段示例代码
{
[[contentView movieTitle] setText:movieTitle];
[[contentView movieYear] setText:movieYear];
[[contentView movieGenres] setText:movieGenres];
[[contentView movieDuration] setText:movieTime];
[[contentView movieDescription] setText:movieDescription];
[[contentView movieStarringName] setText:movieStarring];
[[contentView movieDirectorName] setText:movieDirector];
NSLog(@"--- %@", [contentView movieTitle].text);
}
这个 NSLog 会在一秒钟内出现,但是 UI 中的 [contentView movieTitle] 在 10-20 秒后会自行更改。
我异步请求数据。 contentView 或 movieTitle、movieGenres 等所有属性都是(非原子的,保留的)。
最佳答案
您可能会在后台线程中进行 UI 更新(您从网络服务获取返回值或解析 JSON)。为了及时更新您的 UI(并且不至于使应用程序崩溃),请在主线程中进行更新。这可以通过几种方式完成。最简单的(至少对我而言)是调用 dispatch_async
。
dispatch_async(dispatch_get_main_queue(), ^{
[[contentView movieTitle] setText:movieTitle];
[[contentView movieYear] setText:movieYear];
[[contentView movieGenres] setText:movieGenres];
[[contentView movieDuration] setText:movieTime];
[[contentView movieDescription] setText:movieDescription];
[[contentView movieStarringName] setText:movieStarring];
[[contentView movieDirectorName] setText:movieDirector];
});
关于ios - 延迟更新UI,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21207238/