Cocoa 如何使其立即反映我在UI(文本字段)中设置为IBOulet的值?

Cocoa 如何使其立即反映我在UI(文本字段)中设置为IBOulet的值?,cocoa,Cocoa,假设我有十行代码 1 2 [地址街道设置字符串值:街道] 4 5 6 7 8 9 十, 其中addressStreet是指向UI和中文本字段的IBOutlet street是一个NSString对象 只有在所有的10行被执行之后,我才能在UI中看到更新的值。我的要求是,在执行第3行之后,甚至在执行下一行(第4行)之前,该值应该立即反映在UI中 也尝试过绑定!没有 有什么办法可以做到这一点吗 先走一步 一般来说,如果您有一些长时间运行的计算阻塞了您的UI,那么最好将其分块或在第二个线程上运行。只要

假设我有十行代码

1
2
[地址街道设置字符串值:街道]
4
5
6
7
8
9
十,

其中addressStreet是指向UI和中文本字段的IBOutlet street是一个NSString对象

只有在所有的10行被执行之后,我才能在UI中看到更新的值。我的要求是,在执行第3行之后,甚至在执行下一行(第4行)之前,该值应该立即反映在UI中

也尝试过绑定!没有

有什么办法可以做到这一点吗


先走一步

一般来说,如果您有一些长时间运行的计算阻塞了您的UI,那么最好将其分块或在第二个线程上运行。只要这个方法阻塞了主线程,用户无论如何都无法与任何东西进行交互


但是,您的问题的直接答案是,您需要告诉字段重新绘制自己。通常,它会在下一个事件循环中执行此操作,但由于该方法阻止了此操作,因此它不会发生。您可以通过调用
[view display]

告诉视图重新绘制,当您返回到UI循环时,该字段将重新绘制。你的问题是你花的时间太长了。所以,不要花那么长时间

有很多方法可以做到这一点:

  • 延迟执行(迄今为止最简单)
  • 中央大调度(仅限雪豹)
  • NSOperation/NSOperationQueue
  • 计时器
  • 线程
  • 其中大多数都不适合您的情况,但我不知道您的情况是什么(即,所有其他代码行都在做什么),所以我不知道哪些解决方案是合适的,哪些不合适。您必须研究所有这些解决方案,并自行决定哪一个最合适


    简单地告诉字段立即绘制并不是解决方案。是的,它会立即绘制,但您的UI仍然被阻止。在您从方法返回之前,您的用户无法执行任何操作,唯一的解决方案是更快地返回。一旦你这样做了,告诉字段立即绘制就没有必要了。

    Thnx用于回复。让我试试,然后再给你回复。谢谢你的回复。让我试试,然后再打给你。