无法使用Forecastr包装器的JSON结果

时间:2013-06-16 04:31:05

标签: ios objective-c afnetworking weather-api forecastr

我开始使用Objective-C,似乎无法提取被AFNetworking拉取的数据用作标签文本等。我​​将它用于由Forecast.io支持的天气应用程序,以及Forecastr API包装器。如果API正在将JSON写入字典,我似乎无法找到它。

在主视图控制器中:

[forecastr getForecastForLocation:location time:nil exclusions:nil success:^(id JSON) {
        NSLog(@"JSON response was: %@", JSON);
        NSLog(@"Testing: %@", [JSON valueForKey:kFCSummary]);

    } failure:^(NSError *error, id response) {
        NSLog(@"Error while retrieving forecast: %@", [forecastr messageForError:error withResponse:response]);
    }];
}

第一个NSLog行将返回完整的JSON对象,序列化和所有内容,但第二个只是输出NULL。

在Forecastr.m文件中:

NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:urlString]];
if (self.callback) {
    AFHTTPRequestOperation *httpOperation = [[AFHTTPRequestOperation alloc] initWithRequest:request];
    [httpOperation setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id responseObject) {
        NSString *JSONP = [[NSString alloc] initWithData:responseObject encoding:NSASCIIStringEncoding];
        if (self.cacheEnabled) [self cacheForecast:JSONP withURLString:cacheKey];
        success(JSONP);
    } failure:^(AFHTTPRequestOperation *operation, NSError *error) {
        failure(error, operation);
    }];
    [pendingRequests addObject:httpOperation];
    [forecastrQueue addOperation:httpOperation];
} else {
    AFJSONRequestOperation *jsonOperation = [AFJSONRequestOperation JSONRequestOperationWithRequest:request
        success:^(NSURLRequest *request, NSHTTPURLResponse *response, id JSON) {
        if (self.cacheEnabled) [self cacheForecast:JSON withURLString:cacheKey];
        success(JSON);
    } failure:^(NSURLRequest *request, NSHTTPURLResponse *response, NSError *error, id JSON){
        failure(error, JSON);
    }];
    [pendingRequests addObject:jsonOperation];
    [forecastrQueue addOperation:jsonOperation];
}

我可以告诉这个读取缓存的预测,然后在缓存太旧时拉下新的JSON文件。但我无法分辨它放在哪里JSON,而且它不在大多数教程和资源使用的字典中。

我已经尝试了很多不同的东西,例如创建我自己的字典,但它不会在那里添加JSON对象。我也尝试使用返回的JSON对象作为字典和键值对,但似乎没有任何工作。几天我一直在撞墙,但几乎没有人使用Forecastr有问题。

2 个答案:

答案 0 :(得分:1)

问题是您要回复的数据被分成许多不同的部分(例如当天和每周的每一天)。您不能只询问温度的整体数据集,您需要导航到您感兴趣的“日期”,然后请求温度。如:

[[JSON objectForKey:kFCCurrentlyForecast] objectForKey:kFCTemperature]

答案 1 :(得分:0)

JSON似乎是一个字符串(github)。要解析此问题,您可以使用JSONKit等库。