创建网址时出现问题

时间:2011-05-14 04:57:11

标签: iphone objective-c url

我想创建一个网址,如下所示 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

我使用以下代码创建此

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都是零。

我认为问题是由于“|”。有人遇到同样的问题吗?如果是的话,你能帮助我吗?

4 个答案:

答案 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"];