您可能有一些保留字符会阻止NSURL
对象正确实例化,即URLWithString
可能正在返回nil
.
NSString *insertUrlString =[NSString stringWithFormat: @"http://www.miafoto.it/iPhone/inarrivo/taxi/insertUserNew.php?udid=%@&token=%@&nickname=%@&app=%@&language=%@&Latitude=%f&Longitude=%f&new=1",myUdid, token, nickName, app, language, latitude, longitude];
您可以通过检查来确认这一点NSURL
:
NSURL *url = [NSURL URLWithString:insertUrlString];
NSAssert(url, @"problem instantiating NSURL: %@", insertUrlString);
这些字符串中是否有空格或其他保留字符?百分比转义这些值总是更安全。就个人而言,我将参数添加到字典中,然后有一个函数可以百分比转义值,例如:
NSDictionary *parameters = @{@"udid" : myUdid,
@"token" : token,
@"nickname" : nickName,
@"app" : app,
@"language" : language,
@"Latitude" : @(latitude),
@"Longitude" : @(longitude),
@"new" : @"1"};
NSString *insertUrlString = [NSString stringWithFormat: @"http://www.miafoto.it/iPhone/inarrivo/taxi/insertUserNew.php?%@", [self encodeParameters:parameters]];
NSURL *url = [NSURL URLWithString:insertUrlString];
NSAssert(url, @"problem instantiating NSURL: %@", insertUrlString);
在哪里:
- (NSString *)encodeParameters:(NSDictionary *)parameters
{
NSMutableArray *parameterArray = [NSMutableArray arrayWithCapacity:[parameters count]];
for (NSString *key in parameters) {
NSString *string;
id value = parameters[key];
if ([value isKindOfClass:[NSData class]]) {
string = [[NSString alloc] initWithData:value encoding:NSUTF8StringEncoding];
} else if ([value isKindOfClass:[NSString class]]) {
string = value;
} else if ([value isKindOfClass:[NSNumber class]]) {
string = [value stringValue];
} else { // if you want to handle other data types, add that here
string = [value description];
}
[parameterArray addObject:[NSString stringWithFormat:@"%@=%@", key, [self percentEscapeString:string]]];
}
return [parameterArray componentsJoinedByString:@"&"];
}
- (NSString *)percentEscapeString:(NSString *)string
{
NSString *result = CFBridgingRelease(CFURLCreateStringByAddingPercentEscapes(kCFAllocatorDefault,
(CFStringRef)string,
(CFStringRef)@" ",
(CFStringRef)@":/?@!$&'()*+,;=",
kCFStringEncodingUTF8));
return [result stringByReplacingOccurrencesOfString:@" " withString:@"+"];
}