1

我在这里有这个 PHP 脚本,可以将数组转换为 json:

while($row = $result->fetch_row()){
        $array[] = $row;
    }

   echo json_encode($array);

返回这个

[["No","2013-06-08","13:07:00","Toronto","Boston","2013-07-07 17:57:44"]]

现在我尝试将此 json 代码中的值显示到我的应用程序标签中。这是我的 ViewController.m 文件中的代码:

- (void)viewDidLoad
{
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.
    NSString *strURL = [NSString stringWithFormat:@"http://jamessuske.com/isthedomeopen/isthedomeopenGetData.php"];

    // to execute php code
    NSData *dataURL = [NSData dataWithContentsOfURL:[NSURL URLWithString:strURL]];

    // to receive the returend value
    /*NSString *strResult = [[[NSString alloc] initWithData:dataURL encoding:NSUTF8StringEncoding]autorelease];*/


    self.YesOrNow.text = [NSJSONSerialization JSONObjectWithData:dataURL options:0 error:nil];

}

但是我的标签 YesOrNow 没有显示任何内容:(我做错了什么?

我需要安装 JSON 库吗?

4

1 回答 1

2

你很接近,但有几个问题:

  1. 您正在加载数据,但未成功导航结果。您正在返回一个包含一个项目的数组,该项目本身就是一个结果数组。是/否文本值是该子数组的第一项。

  2. 您不应该在主线程上加载数据。将其分派到后台队列,并在更新标签时将其分派回主队列(因为所有 UI 更新都必须发生在主队列上)。

  3. 您应该检查错误代码。

因此,您最终可能会得到以下结果:

- (void)viewDidLoad
{
    [super viewDidLoad];

    [self loadJSON];
}

- (void)loadJSON
{
    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
        NSURL *url = [NSURL URLWithString:@"http://jamessuske.com/isthedomeopen/isthedomeopenGetData.php"];
        NSError *error = nil;
        NSData *data = [NSData dataWithContentsOfURL:url options:0 error:&error];
        if (error)
        {
            NSLog(@"%s: dataWithContentsOfURL error: %@", __FUNCTION__, error);
            return;
        }

        NSArray *array = [NSJSONSerialization JSONObjectWithData:data options:0 error:&error];
        if (error)
        {
            NSLog(@"%s: JSONObjectWithData error: %@", __FUNCTION__, error);
            return;
        }

        NSArray *firstItemArray = array[0];

        NSString *yesNoString = firstItemArray[0];
        NSString *dateString = firstItemArray[1];
        NSString *timeString = firstItemArray[2];
        // etc.

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

}
于 2013-07-08T05:06:12.617 回答