我使用以下代码创建此
NSURL *jsonURL;
NSString *strurl = [[NSString alloc]initWithFormat:@"http://maps.googleapis.com/maps/api/directions/json?origin=Adelaide,SA&destination=Adelaide,SA&waypoints=optimize:true|Barossa+Valley,SA|Clare,SA|Connawarra,SA|McLaren+Vale,SA&sensor=false"];
jsonURL = [NSURL URLWithString:strurl];
[strurl release];
NSLog(@"json Url%@",jsonURL);
NSString *jsonData = [[NSString alloc] initWithContentsOfURL:jsonURL];
NSMutableDictionary *dic = [[NSMutableDictionary alloc]init];
if(jsonData == nil){
//NSLog(@"Data NIL .....");
}
else{
SBJSON *json = [[SBJSON alloc] init];
NSError *error = nil;
dic = [json objectWithString:jsonData error:&error];
[json release];
}
但每次我jsonURL
都是零。
我认为问题是由于“|”。有人遇到同样的问题吗?如果是的话,你能帮助我吗?
答案 0 :(得分:3)
尝试
[NSURL URLWithString:[strurl stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]]
答案 1 :(得分:2)
URLWithString
的文档说:
用于初始化NSURL对象的字符串。 必须符合RFC 2396。
... which e.g. mentions:
排除其他字符,因为 网关和其他运输代理商 众所周知,有时会修改这样的 字符,或者它们用作 分隔符。
unwise = "{" | "}" | "|" | "\" | "^" | "[" | "]" | "`"
对应于排除的数据 必须转义字符才能 在URI中正确表示。
因此, slf 建议正确地逃避它们。
此外,只需对预定义的字符串使用字符串常量:
NSString *strurl = @"http://....";
答案 2 :(得分:2)
至于您的网址问题,Georg是对的:
NSURL *jsonURL = [NSURL URLWithString:@"http://maps.googleapis.com/maps/api/directions/json?origin=Adelaide,SA&destination=Adelaide,SA&waypoints=optimize%3Atrue%7CBarossa+Valley,SA%7CClare,SA%7CConnawarra,SA%7CMcLaren+Vale,SA&sensor=false"];
为我修复了这个问题。
然而,接下来的一点:
NSString *jsonData = [[NSString alloc] initWithContentsOfURL:jsonURL];
令人深感不安。您永远不应该在主线程上执行同步数据读取。 initWithContentsOfURL将产生一个同步NSURLConnection以获取该数据,并可能在星期日之前返回,但你永远不会知道。 (这种方法适用于文件系统加载,其中事物更具确定性)
查看来自Apple的NSURLConnection
的异步加载API,或者更好的是ASIHTTPRequest
,其中有大量的在线文档。
快乐的网络服务!
答案 3 :(得分:1)
我认为,原因的根源是你的字符串创建方法。
NSString *strurl = [[NSString alloc]initWithFormat:@"http://maps.googleapis.com/maps/api/directions/json?origin=Adelaide,SA&destination=Adelaide,SA&waypoints=optimize:true|Barossa+Valley,SA|Clare,SA|Connawarra,SA|McLaren+Vale,SA&sensor=false"];
试试......
NSString *strurl = [[NSString alloc]initWithString:@"http://maps.googleapis.com/maps/api/directions/json?origin=Adelaide,SA&destination=Adelaide,SA&waypoints=optimize:true|Barossa+Valley,SA|Clare,SA|Connawarra,SA|McLaren+Vale,SA&sensor=false"];