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

Reply via email to