2011-11-11 4 views
-1

J'ai une classe qui analyse un flux XML. Dans cette classe, je dois méthode suivante:Comportement bizarre NSString vs 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; 
} 

La première NSLog est l'URL correcte, mais le NSURL sort que (null)

est ici où j'appelle la méthode:

//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]; 

Si je NSLog nom ici, il montre la bonne valeur.

Quelqu'un at-il une idée de la raison pour laquelle le NSURL est (null)?

+0

Quelle est la valeur du nom? – hypercrypt

+0

C'est juste une chaîne contenant les paramètres dont j'ai besoin pour analyser l'autre flux XML. Et comme je l'ai écrit ci-dessus, les valeurs correctes sortent quand je NSLog il. – Magnus

+0

Pouvez-vous publier la sortie du premier 'NSLog'? Vous n'échappez pas à la chaîne de nom, donc il pourrait y avoir des caractères qui ne sont pas valides pour une URL ... – hypercrypt

Répondre

0

Vous voulez échapper name. Ajouter une catégorie sur NSString et ensuite appeler [name urlEncodedString]. par exemple:

@implementation NSString (URLEncoding) 

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

@end 
+0

NSString * encodedString = [nom urlEncodedString]; donne un avertissement disant: NSString peut ne pas répondre à -urlEncodedString. L'application se bloque au lancement – Magnus

+0

Avez-vous ajouté une catégorie sur 'NSString'? Avez-vous importé la catégorie? – hypercrypt

+0

J'ai essayé NSString * encodedString = [nom stringByReplacingPercentEscapesUsingEncoding: NSUTF8StringEncoding]; alors la chaîne est correcte, mais l'URL est à nouveau nulle. WTF – Magnus

0

Utilisez les indications suivantes ..

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

J'ai essayé cela, et mis un NSLog sur les données, sort (null) aussi. – Magnus

+0

votre urlString doit être 'http: //myurl.com/names.asp? Name =' et le nom doit être n'importe quel nom que vous voulez. –

+0

C'est ce que je cherche, oui. – Magnus