Improve company productivity with a Business Account.Sign Up

x
  • Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 859
  • Last Modified:

Updating UI Manually

Hi,

Is there a way to update UI manually?
For example, I have a function which updates UI and execute some logic.
After the UI update, it will execute some logic that will take a long time and update of UI has to be wait until the execution of logic is finished.
Is there a way to update UI manually befor even the logic is even executed?

It seems that thread can be used in here.
But Is there a way to solve this by not using thread?
Also, using if thread can be used, what is the best practice?

Thanks!
0
privateson
Asked:
privateson
  • 2
1 Solution
 
pgnatyukCommented:
In this thread:
http://www.experts-exchange.com/Apple/Programming/Objective-C/Q_26411565.html?sfQueryTermInfo=1+10+30+setneedsdisplai

I've told to use
[theView setNeedsDisplay:YES];

in case you need to update the view. You can do it from the main thread.
Do you understand this way? Maybe, I do not understand your questions?

About the threads. Yes, any long operation in any language, for any device, should be launched in a separate thread. In iOS you can use POSIX threads and NSThread.
iOS Reference Library. Thread Management
http://developer.apple.com/iphone/library/documentation/cocoa/conceptual/Multithreading/CreatingThreads/CreatingThreads.html

I'd say to use NSThread. Here are two simple tutorials:
http://www.xprogress.com/post-36-threading-tutorial-using-nsthread-in-iphone-sdk-objective-c/
http://www.eigo.co.uk/Programming-threaded-processes-in-iPhone.aspx

The idea is simple. You create new thread:
[NSThread detachNewThreadSelector:@selector(threadMethod) toTarget:self withObject:nil];
The thread method should be like that:
- (void)threadMethod {
      NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
      //Here is the code.
      [pool release];
}

If you need to do something in the main thread from this new thread:
[self performSelectorOnMainThread:@selector(UpdateUIMethod) withObject:nil waitUntilDone:false];
In that method (it will be called in the main thread), you can update the UI.

You can try:
[theView performSelectorOnMainThread:@selector(setNeedsDisplay:YES) withObject:myText waitUntilDone:NO];

(I just wrote it here without testing, but it gives an idea)




0
 
privatesonAuthor Commented:
thanks!
0
 
pgnatyukCommented:
You are welcome
0
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

Join & Write a Comment

Featured Post

What Kind of Coding Program is Right for You?

There are many ways to learn to code these days. From coding bootcamps like Flatiron School to online courses to totally free beginner resources. The best way to learn to code depends on many factors, but the most important one is you. See what course is best for you.

  • 2
Tackle projects and never again get stuck behind a technical roadblock.
Join Now