遇到问题。这是我的代码:
Latitude = [TBXML textForElement:lat]; //Latitude & Longitude are both NSStrings
Longitude= [TBXML textForElement:lon];
NSLog(@"LAT:%@ LON:%@",Latitude,Longitude);
NSString *defaultURL = @"http://api.wxbug.net/getLiveWeatherRSS.aspx?ACode=000000000&lat=+&long=-&unittype=1";
newURL = [[defaultURL stringByReplacingOccurrencesOfString:@"+"
withString:Latitude]
stringByReplacingOccurrencesOfString:@"-"
withString:Longitude];
NSLog(@"%@",newURL);
这是输出:
LAT:-33.92 LON:18.42
http://api.wxbug.net/getLiveWeatherRSS.aspxACode=000000000&lat=18.4233.92&long=18.42&unittype=1
正如您所看到的,附加代码发生了一些奇怪的事情。我在这里做错了吗?
答案 0 :(得分:7)
在替换经度之前,字符串是
http://....&lat=-33.92&long=-&...
^ ^
系统发现有两个-
,因此它们都会被纬度所取代。
您应该使用更具描述性的字符串来代替,例如
NSString *defaultURL = @"http://....&lat={latitude}&long={longitude}&unittype=1";
newURL = [defaultURL stringByReplacingOccurrencesOfString:@"{latitude}"
withString:Latitude];
newURL = [newURL stringByReplacingOccurrencesOfString:@"{longitude}"
withString:Longitude];
或只使用+stringWithFormat:
。
NSString* newURL = [NSString stringWithFormat:@"http://....&lat=%@&long=%@&...",
Latitude, Longitude];
答案 1 :(得分:3)
这是我们开始的地方:
url = @"http://...?ACode=000000000&lat=+&long=-&unittype=1"
Latitude = @"-33.92"
Longitude = @"18.42"
然后,您将所有@"+"
替换为@"-33.92"
:
url = @"http://...?ACode=000000000&lat=-33.92&long=-&unittype=1"
然后,您将所有@"-"
替换为@"18.42"
。 请注意,有两个' - '字符;一个在lat=
后面,一个在long=
之后。 'lat'之后的那个是因为你粘贴的字符串中有一个-
。
url = @"http://...?ACode=000000000&lat=18.4233.92&long=18.42&unittype=1"
因此,你的最终结果。
答案 2 :(得分:2)
@KennyTM,BJ Homer和madmik3都是正确的。你的价值被取代了两次。
但是,您应该技术上以完全不同的方式构建您的网址:
NSMutableDictionary *query = [NSMutableDictionary dictionary];
[query setObject:@"000000000" forKey:@"ACode"];
[query setObject:Latitude forKey:@"lat"];
[query setObject:Longitude forKey:@"long"];
[query setObject:@"1" forKey:@"unittype"];
NSMutableArray *queryComponents = [NSMutableArray array];
for (NSString *key in query) {
NSString *value = [query objectForKey:key];
key = [key stringByAddingPercentEscapesUsingEncoding:NSASCIIStringEncoding];
value = [value stringByAddingPercentEscapesUsingEncoding:NSASCIIStringEncoding];
NSString *component = [NSString stringWithFormat:@"%@=%@", key, value];
[queryComponents addObject:component];
}
NSString *queryString = [components componentsJoinedByString:@"&"];
NSString *fullURLString = [NSString stringWithFormat:@"http://api.wxbug.net/getLiveWeatherRSS.aspx?%@", queryString];
NSURL *newURL = [NSURL URLWithString:fullURLString];
(暂时忽略-stringByAddingPercentEscapesUsingEncoding:
的效力)
更好的原因是,根据HTTP规范,the keys and values in the query of the URL应为URL encoded。当然,你只是为简单的密钥编码。但如果这种情况发生变化,您的URL可能会中断。 (这种方法的缺陷是它只允许每个键一个值,HTTP规范允许你指定多个值。为了简单起见,我把它留了出来)
使用-stringByAddingPercentEscapesUsingEncoding:
时也存在一些问题。有关详细信息,请查看Objective-c iPhone percent encode a string?。
答案 3 :(得分:1)
你的LAT是否定的。所以 - 被替换了两次。