我当前正尝试从此链接中检索数据:http://steamcommunity.com/market/priceoverview/?country=US¤cy=3&appid=730&market_hash_name=%E2%98%85%20Bayonet
我想要你去的时候链接输出的数据然后点击它。
这是我目前的代码:
NSData *data = [[NSData alloc] initWithContentsOfURL:[NSURL URLWithString:@"http://steamcommunity.com/market/priceoverview/?country=US¤cy=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'
我认为这与网络字符串中涉及的明星有关,有没有人有这方面的解决方案?
答案 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¤cy=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¤cy=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€
// Data is weird to me, but looks appropriate.
}
}
首先,在使用之前,您没有尝试转义字符串。 initWithString:
文档声明:
此方法要求URLString仅包含字符 允许在正确形成的URL中。所有其他角色必须是 适当的百分比逃脱。任何百分比转义的字符都是 使用UTF-8编码解释。
所以,我们这样做。但是,示例代码中的原始字符串是&#34;部分转义&#34;。如果您转义了该网址,则最终会收到:
http://steamcommunity.com/market/priceoverview/?country=US¤cy=3&appid=730&market_hash_name=%E2%98%85%2520Bayonet
而不是
http://steamcommunity.com/market/priceoverview/?country=US¤cy=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¤cy=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¤cy=3&appid=730&market_hash_name=%E2%98%85%20Bayonet"]];
NSDictionary *test = [NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:&error];
NSLog(@"%@", test[@"lowest_price"]);