尝试从URL返回数据获取数据在目标c中为零

时间:2014-09-22 16:25:32

标签: objective-c json xcode

我当前正尝试从此链接中检索数据:http://steamcommunity.com/market/priceoverview/?country=US&currency=3&appid=730&market_hash_name=%E2%98%85%20Bayonet

我想要你去的时候链接输出的数据然后点击它。

这是我目前的代码:

NSData *data = [[NSData alloc] initWithContentsOfURL:[NSURL URLWithString:@"http://steamcommunity.com/market/priceoverview/?country=US&currency=3&appid=730&market_hash_name=★%20Bayonet"]];

NSDictionary *test = [NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:&error];
NSLog(@"%@", test[@"lowest_price"]);

但是currentley它返回了这个错误:

*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'data parameter is nil'

我认为这与网络字符串中涉及的明星有关,有没有人有这方面的解决方案?

2 个答案:

答案 0 :(得分:1)

示例代码中的原始网址格式不正确。

首先,这是有效的代码:

#import <Foundation/Foundation.h>

int main(int argc, char *argv[]) {
    @autoreleasepool {
        NSError *error = nil;

        // NOTE: I pruned the original '%20' in your example -- partially escaped strings
        //   are difficult to deal with.
        NSString *urlString = @"http://steamcommunity.com/market/priceoverview/?country=US&currency=3&appid=730&market_hash_name=★ Bayonet";

        // Now, escape the entire string
        NSURL *url = [NSURL URLWithString:[urlString stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]];
        // Looks good
        NSLog(@"%@", [url absoluteString]);
        // http://steamcommunity.com/market/priceoverview/?country=US&currency=3&appid=730&market_hash_name=%E2%98%85%20Bayonet

        // Run it
        NSData *data = [[NSData alloc] initWithContentsOfURL:url];
        NSDictionary *test = [NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:&error];
        NSLog(@"%@", test[@"lowest_price"]);
        //129,99&#8364;
        // Data is weird to me, but looks appropriate.
    }
}

首先,在使用之前,您没有尝试转义字符串。 initWithString:文档声明:

  

此方法要求URLString仅包含字符   允许在正确形成的URL中。所有其他角色必须是   适当的百分比逃脱。任何百分比转义的字符都是   使用UTF-8编码解释。

所以,我们这样做。但是,示例代码中的原始字符串是&#34;部分转义&#34;。如果您转义了该网址,则最终会收到:

http://steamcommunity.com/market/priceoverview/?country=US&currency=3&appid=730&market_hash_name=%E2%98%85%2520Bayonet

而不是

http://steamcommunity.com/market/priceoverview/?country=US&currency=3&appid=730&market_hash_name=%E2%98%85%20Bayonet

......正如你所看到的,&#39;%20&#39;它本身会逃到&#39;%2520&#39;。

我希望这会有所帮助。欢呼声。

答案 1 :(得分:0)

编辑: 请检查您复制的URL中是否有错误。 实际的URL是您在评论中提到的URL: @&#34; http://steamcommunity.com/market/priceoverview/?country=US&currency=3&appid=730&market_hash_name=%E2%98%85%20Bayonet&#34;

NSData *data = [[NSData alloc] initWithContentsOfURL:[NSURL URLWithString:@"http://steamcommunity.com/market/priceoverview/?country=US&currency=3&appid=730&market_hash_name=%E2%98%85%20Bayonet"]];
NSDictionary *test = [NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:&error];

NSLog(@"%@", test[@"lowest_price"]);