The right solution is, as Fritz mentioned, to design your code to work asynchronously. But for a quick-and-dirty solution to force a text field (or any other UI) to show a change straight away is to include the redraw directly yourself. This should not be done from a thread other than main however.
[_infoField setStringValue:@"hello world!"]; [[_infoField window] displayIfNeeded]; // processes view updates pending // ..... some lengthy code that blocks the main thread, delaying normal updates ..... --Graham > On 12 Nov 2014, at 7:58 pm, sqwarqDev <sqwarq...@icloud.com> wrote: > >> On 11 Nov 2014, at 23:01, Fritz Anderson <fri...@manoverboard.org> wrote: > >> -needsDisplay schedules a view’s -drawRect: for the next pass through the >> runloop. You’re putting your process to sleep at the OS level, so the >> runloop is suspended along with everything else. >> >> What you posted is evidently a minimal case, and maybe, instead of sleep(), >> your lengthy method is called instead. Same principle: Unless that method >> runs asynchronously (or simulates asynchrony by doing its work piecewise on >> an NSTimer, or by periodically sending -runMode:beforeDate: to the runloop), >> the runloop never has the chance to dispatch view updates. > > > Thanks for this Fritz. I think I get it. I need to get a clearer idea of how > the run loop works. This isn't the first time I've been confused about why a > line doesn't appear to return the result I expect before the next line > executes. I suppose this is part of the difference between using traditonal > procedural languages and these /new-fangled/ object-oriented ones... :~) > > I guess I've got some reading up to do! Thanks again. _______________________________________________ Cocoa-dev mailing list (Cocoa-dev@lists.apple.com) Please do not post admin requests or moderator comments to the list. Contact the moderators at cocoa-dev-admins(at)lists.apple.com Help/Unsubscribe/Update your Subscription: https://lists.apple.com/mailman/options/cocoa-dev/archive%40mail-archive.com This email sent to arch...@mail-archive.com