奇怪的NSString与NSURL行为

问题描述:

我有一个解析XML提要的类。在I类有以下方法:奇怪的NSString与NSURL行为

-(id)loadXMLByURL:(NSString *)urlString name:(NSString*)name{ 
    NSString *urls = [[NSString alloc]initWithFormat:@"%@%@" , urlString, name]; 
    NSLog(@"STRING URL: %@" , urls); 
    NSURL *url = [NSURL URLWithString:urls]; 

    NSLog(@"%@" , url); 

    parser = [[NSXMLParser alloc]initWithContentsOfURL:url]; 
    parser.delegate = self; 
    BOOL success = [parser parse]; 
    if (success) { 
     NSLog(@"No error"); 
    }else{ 
    NSLog(@"Error: %@" , parser.parserError); 
} 
    return self; 
} 

第一的NSLog是正确的网址,但该NSURL出来的(空)

这里就是我所说的方法:

//f is an object where I store the value of name from another feed, which I have to use as a parameter in the url for this feed 

NSString *name = f.name; 
     myParser = [[MyParser alloc]loadXMLByURL:@"http://myurl.com/names.asp?name=" name:name]; 

如果我的NSLog名称在这里,它显示正确的值。

任何人都知道为什么NSURL出来(空)?

+0

名称的价值是什么? – hypercrypt

+0

这只是一个包含我需要解析其他XML提要的参数的字符串。就像我上面写的那样,正确的值出来时,我NSLog它。 – Magnus

+0

你可以发布第一个'NSLog'的输出吗?你不逃避名称字符串,因此可能有字符在那里是无效的URL ... – hypercrypt

你会想逃离name

NSString上添加类别,然后致电[name urlEncodedString]。例如:

@implementation NSString (URLEncoding) 

- (NSString *)urlEncodedString 
{ 
    return (NSString *)CFURLCreateStringByAddingPercentEscapes(NULL, 
                   (CFStringRef)self, 
                   NULL, 
                   (CFStringRef)@"!*'\"();:@&=+$,/?%#[]% ", 
                   kCFStringEncodingUTF8); 
} 

@end 
+0

NSString * encodedString = [name urlEncodedString];给出警告:NSString可能不会响应-urlEncodedString。启动时应用程序崩溃 – Magnus

+0

您是否在'NSString'上添加了一个类别?你是否导入了类别? – hypercrypt

+0

我试过NSString * encodedString = [name stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding];那么字符串很好,但URL又是(空)。 WTF – Magnus

使用以下..

NSData *data = [NSData dataWithContentsOfURL:[NSURL URLWithString:[NSString stringWithFormat::@"%@%@" , urlString, name]]]; 
parser = [[NSXMLParser alloc] initWithData: data]; 
parser.delegate = self; 
BOOL success = [parser parse]; 
if (success) { 
    NSLog(@"No error"); 
}else{ 
    NSLog(@"Error: %@" , parser.parserError); 
} 
return self; 
+0

我试过这个,并把一个NSLog的数据,出来(null)了。 – Magnus

+0

你的urlString必须是'http://myurl.com/names.asp?name =',名字应该是你想要的任何名字。 –

+0

这就是我要找的,是的。 – Magnus