2009-06-13 14 views
1

J'ai une servlet qui sert un fichier XML plist. Quelle est la meilleure façon de réduire cela en un NSDictionary? J'ai ceci fonctionnant fondamentalement avec:manière canonique de lire plist de URL dans NSDictionary? Comment contrôler le timeout?

NSDictionary* dict = [ [ NSDictionary alloc] initWithContentsOfURL: 
        [NSURL URLWithString: @"http://example.com/blah"] ]; 

Mais alors je n'ai aucun contrôle sur le délai d'attente; Je préférerais ne pas avoir mon interface utilisateur pendant 60 secondes juste parce que le serveur (que je ne peux pas contrôler) a un ajustement hissy. Je sais NSURLRequest, ce qui me permettra de faire ce qui suit:

NSURLRequest *theRequest=[NSURLRequest requestWithURL: 
     [NSURL URLWithString: @"http://example.com/blah" 
        cachePolicy:NSURLRequestUseProtocolCachePolicy 
      timeoutInterval:5 ]; 

Mais je ne vois pas tout à fait comment nourrir que de NSDictionary.

Répondre

5

Vous devez faire cela en utilisant les méthodes asynchrones. Commencez par cette réponse/message:

Can I make POST or GET requests from an iphone application?

Cela vous obtenir vos données et placez-le dans un varibale: responseData. Maintenant, vous devez ajouter votre code pour le convertir en un NSDictionary dans la méthode suivante:

- (void)connectionDidFinishLoading:(NSURLConnection *)connection; 

J'ai trouvé 2 façons de convertir NSData à NSDictionary. Cette voie est directement à partir de la pomme Archives and Serializations Guide.

NSString *errorStr = nil; 
NSPropertyListFormat format; 

NSDictionary *dictionary = [NSPropertyListSerialization propertyListFromData: responseData 
       mutabilityOption: NSPropertyListImmutable 
       format: &format 
       errorDescription: &errorStr]; 

Deuxième:

NSString *string = [[NSString alloc] initWithData:responseData encoding:NSASCIIStringEncoding]; 
NSDictionary *dictionary = [string propertyList]; 
[string release]; 
+0

Excellent, merci Corey. Venu à la recherche d'un chemin ... vous m'avez donné deux. –