奇怪的NSString vs NSURL行为

时间:2011-11-11 10:41:36

标签: iphone objective-c xcode cocoa

我有一个解析XML提要的类。在那个课程中,我必须遵循以下方法:

-(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是正确的URL,但是NSURL是(null)

这是我调用方法的地方:

 //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会出现(null)?

2 个答案:

答案 0 :(得分:0)

使用以下内容..

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;

答案 1 :(得分:0)

你想要逃避name

NSString上添加类别,然后致电[name urlEncodedString]。 e.g:

@implementation NSString (URLEncoding)

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

@end