3

我正在尝试使用 ViewController.m 文件中的代码更新 UILabel。

returnInfo.text = @"The website is up!";

但这种变化不会出现在应用程序中长达几分钟,但它确实出现了。我做错了什么,为什么要花这么长时间才能出现?我希望标签在此代码执行后立即更新。

这是我的整个 ViewController.m 文件: http://pste.co/p/mTvcgTftdr1a (第 40、45、51 行)

4

1 回答 1

1

我有一个非常肮脏(蹩脚)的解决方案,只是我现在想不出更好的解决方案。

接下来是解决方案:

视图控制器.h

NSString *someData;
NSTimer *testTimer;

视图控制器.m

-(void)tempMethod{
   if (([someData rangeOfString:@"\"status_code\": 1"].location == NSNotFound) &&
                    ([someData rangeOfString:@"\"status_code\": 2"].location == NSNotFound)) {
                returnInfo.text = @"This URL looks invalid";
                NSLog(@"Status Code 3");

            } else if (([someData rangeOfString:@"\"status_code\": 2"].location == NSNotFound) &&
                        ([someData rangeOfString:@"\"status_code\": 3"].location == NSNotFound))  {
                returnInfo.text = @"The website appears to be up!";
                [returnInfo setNeedsDisplay];
                NSLog(@"Status Code 1");
            } else if (([someData rangeOfString:@"\"status_code\": 3"].location == NSNotFound) &&
                        ([someData rangeOfString:@"\"status_code\": 1"].location == NSNotFound)) {
                NSLog(@"Status Code 2");
                returnInfo.text = @"This website is down";
            }
}

- (IBAction)connection:(UIButton *)sender{
    NSString *url= @"http://isitup.org/duckduckgo.com.json";
    NSURLSession *session = [NSURLSession sharedSession];
    [[session dataTaskWithURL:[NSURL URLWithString:url]
            completionHandler:^(NSData *data,
                                NSURLResponse *response,
                                NSError *error) {
                someData = [NSString stringWithUTF8String:[data bytes]];
                NSLog(@"%@",someData);
            }] resume];
    testTimer = [NSTimer scheduledTimerWithTimeInterval:0.1 target:self selector:@selector(tempMethod) userInfo:nil repeats:YES];
}

接下来是我给你的建议:阅读 UIViewController 生命周期和线程:

另一个对脏代码感到抱歉。我可以为这个答案采取一些缺点,明天我会考虑更好的。

于 2013-10-29T23:47:57.260 回答