Objective C - 循环更改标签文本
我有一个看起来像这样的循环
for(int x=0; x < 10; x++){
[testLabel setText:[self randomString]];
sleep(1);
}
randomString 是一种从数组返回随机字符串的方法。
我正在使用睡眠,所以实际上可以看到标签被更改。
循环工作正常,但标签仅在循环的最后一次迭代后更新。
有谁知道为什么会这样?有办法解决吗?
i have a loop that looks like this
for(int x=0; x < 10; x++){
[testLabel setText:[self randomString]];
sleep(1);
}
The randomString is a method where it returns a random string from an array.
I'm using sleep so it is actually possible to see the label being changed.
The loop works fine but the label only gets updated after the last iteration from the loop.
Does anyone know why this could be? And would there be a way to fix it?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
不要
在主线程上调用 sleep() ,并且在辅助线程中使用 sleep() 通常是非常值得怀疑的。
在这种情况下,只需使用 NSTimer 实例定期更新值(正如 Wilbur 所说)。
Do not call sleep()
Certainly not ever on the main thread and any use of
sleep
in secondary threads is generally highly questionable.In this case, just use an NSTimer instance to periodically update the value (as Wilbur said).
UI 仅在运行循环结束时更新,您的循环在单次迭代内运行。您应该使用
NSTimer
相反。The UI is only updated at the end of a run loop, of which your loop is running inside of a single iteration of. You should be using an
NSTimer
instead.要获得更新,您应该单独运行它:
To get updated you should run it separately:
最好在后台线程上运行字符串,
我不会使用 sleep(),而且计时器的工作量太大。
It's better if you run your string on a background thread
I wouldn't use sleep(), and the timer is too much work.