如何在xcode中更新我的UILabel

时间:2013-04-30 07:26:59

标签: iphone ios uilabel

我有解析代码:

NSError* error = nil;
NSString* text = [NSString stringWithContentsOfURL:[NSURL URLWithString:@"http://site.ch/parse.php"] 
                                          encoding:NSASCIIStringEncoding 
                                             error:&error];

从这段代码中我从网址收听名称跟踪。 我也把它拿到我的标签上:

[labelName setStringValue:text];

问题:如何更新我的标签?我希望我的标签在5秒后从URL更新。我使用了计时器计划..但是在此之后我的应用程序变得很慢......请帮助。

3 个答案:

答案 0 :(得分:3)

假设您只是将上述代码放在视图控制器或类似视图的viewDidLoad中,您实际上会阻塞主线程(即UI线程),从而导致应用程序响应所需的时间。从site.ch/parse.php中检索字符串。如建议的那样,您应该在后台下载字符串。此外,必须在主线程上修改UI:

dispatch_queue_t queue = dispatch_get_global_queue(0,0);
dispatch_async(queue, ^{
    NSError* error = nil;
    NSString* text = [NSString stringWithContentsOfURL:[NSURL URLWithString:@"http://site.ch/parse.php"] 
                                      encoding:NSASCIIStringEncoding 
                                         error:&error];

    // checking if error == nil would be appropriate

    dispatch_async(dispatch_get_main_queue(), ^{
        self.labelName.text = text;
    });    
});

此示例(我为任何拼写错误道歉)在后台下载site.ch/parse.php中的文本,并在完成后设置标签。另外,as suggested here在下载真实文本时显示占位符文本是个好主意。

另外,如果您愿意,请查看performSelector:withObject:afterDelay

答案 1 :(得分:0)

你应该尝试使用后台线程或GCD线程来连续更新文本。

答案 2 :(得分:0)

为什么不使用任何后台线程从网址获取数据,在获取数据后,您可以更新标签的值。这样就不会对您的应用程序性能产生任何影响。