0

我有我的解析代码:

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

从此代码中,我从 url radio 获取名称跟踪。我也把这个放到我的标签上:

[labelName setStringValue:text];

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

4

3 回答 3

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 下载文本,并在完成后设置标签。此外,正如这里所建议的,在下载真实文本时显示占位符文本是一个好主意。

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

于 2013-04-30T07:59:46.357 回答
0

您应该尝试使用后台线程或 GCD 线程来不断更新您的文本。

于 2013-04-30T07:33:41.257 回答
0

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

于 2013-04-30T08:11:52.363 回答