2014-06-24 4 views
0

J'essaie d'obtenir des données du serveur local lors de l'analyse de json. Dans un contrôleur de vue j'accéder Ruby local sur le serveur Rails:Impossible de parcourir le tableau

override func viewDidLoad() { 
    super.viewDidLoad() 

    var url = NSURL(scheme: "http", host: "0.0.0.0:3000", path: "/api/search?query=auto") 
    var request = NSURLRequest(URL: url) 

    let task = NSURLSession.sharedSession().dataTaskWithRequest(request) {(data, response, error) in 
    var data1: NSDictionary = NSJSONSerialization.JSONObjectWithData(data, options: NSJSONReadingOptions.MutableContainers, error: nil) as NSDictionary 
     println(data1) 
     println(data1["companies"]) 
     var companies = data1["companies"] as NSArray 
     for company: AnyObject in companies { 
      println(company) 
     } 
    } 
    task.resume() 
} 

println(data1) retours:

{ 
    companies = "[{\"alias\":\"02-avtomoyka-tulybaev-r-t\",\"id\":45693},{\"alias\":\"1001-zapchast-internetmagazin-avtotovarov\",\"id\":42621}]"; 
} 

Avec println(data1["companies"]), j'ai tableau d'objets dans la console:

[{"alias":"02-avtomoyka-tulybaev-r-t","id":45693},{"alias":"1001-zapchast-internetmagazin-avtotovarov","id":42621}] 

Ensuite, lorsque j'essaie de parcourir ce tableau, l'application se bloque. Qu'est-ce que je fais mal? Il stucks avec aucune erreur dans la console, mais (lldb) et EXC_BREAKPOINT(code=EXC_I386_BPT, subcode 0x0) dans la bande de roulement 6

PS: Xcode jette également la question du compilateur Constant 'company' inferred to have type 'AnyObject', which may be unexpected à chaîne for company in companies {. Comment puis-je le gérer?

+0

Pourriez-vous fournir l'erreur et modifier votre requête pour une meilleure compréhension. – nikhil84

+0

@ walle84 J'ai ajouté plus de code, j'espère que cela aide. –

+2

Pour cet avertissement du compilateur, changez votre pour for loop à 'pour la société: AnyObject dans les entreprises {...}' –

Répondre

1

Au lieu de var companies = data1["companies"] as NSArray essayer var companies = data1["companies"].allValues;

Le problème est data1["companies"] est un dictionnaire et ne peut pas être converti implicitement à un NSArray. Le compilateur n'attrape pas ceci parce que data1["companies"] est stocké dans NSDictionary comme AnyObject et vous permettra de le transformer en n'importe quelle sous-classe.

+0

Merci, mais 'data1 [" companies "]. AllValues' renvoie nul pour json bien formé et non. Le problème résolu avec la correction de la génération JSON. –

Questions connexes