开发者

iPhone UILabel not updating

I know there are lots of similar questions floating around, but none of the answers seem to fix my problem. I have an app that uses an NSURLConnection to download a file, and then does some calculations on the downlo开发者_如何学Goaded file. I set up a UILabel to display the current loading status (eg: "Loading file", "Parsing file"). I update the UILabel in the didReceiveResponse and connectionDidFinishLoading function of the NSURLConnection delegate, as well as some other places in my code. I update it by calling the following function:

[self performSelectorOnMainThread:@selector(updateProgress) withObject:nil waitUntilDone:NO]

where -(void)updateProgress is a function I defined to call [theLabel setNeedsDisplay]. I NSLog'd it, like

NSLog(@"theLabel: %@\n",theLabel.text);

and the information is updated correctly, but the label doesn't actually update in the view. Also, updateProgress is only called AFTER everything is loaded. It updates the label THEN, which is hardly useful. Any suggestions?


The NSURLConnection is blocking the main thread (no updates will be performed on the view until it finishes).

You can perform updateProgress in the background:

[self performSelectorInBackground:@selector(updateProgress) withObject:nil]

The first line of updateProgress should be:

NSAutoReleasePool *pool = [[NSAutoReleasePool alloc]init];

The last lines should be:

[pool release];
pool = nil;

http://developer.apple.com/library/ios/#documentation/Cocoa/Reference/Foundation/Classes/NSAutoreleasePool_Class/Reference/Reference.html

Of course, you can also perform the NSURLConnection in the background. Then you can update the label on the main thread.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜