2016-04-22 8 views
2

Ich versuche, einige Daten von facebook Ortsnamen mit Alamofire herauszunehmen, aber ich habe kein Glück. Dies ist, was ich versucht habe und ich kann nicht herausfinden, wie es funktioniert.Alamofire json swift 2.2

Xcode 7.3 swift2.2

So das Ergebnis des Graphen api ist diese

{ 
    "data": [ 
     { 
     "category": "Local business", 
     "category_list": [ 
      { 
       "id": "272705352802676", 
       "name": "Outdoors" 
      }, 
      { 
       "id": "115725465228008", 
       "name": "Region" 
      } 
     ], 
     "location": { 
      "street": "Athens", 
      "city": "Palai\u00f3n F\u00e1liron", 
      "state": "", 
      "country": "Greece", 
      "zip": "17562", 
      "latitude": 37.9284637008, 
      "longitude": 23.6944070162 
     }, 
     "name": "THE NAME OF THE PLACE", 
     "id": "THE ID" 
     } 

und ich möchte nach innen "Daten" gehen und nur den Namen nehmen und die ID des Ortes, der die 2 letzten Zeilen sind.

Und das ist mein Code!

override func viewDidLoad() { 
    super.viewDidLoad() 

Alamofire.request(.GET, "https://graph.facebook.com/search", parameters: ["q": "", "type": "place", "center": "37.928319,23.7036673", "distance": "10000", "access_token": "ACCESS-TOKEN", "expires_in": "5184000"]) 
    .responseJSON { response in 
     if let JSON = response.result.value { 
      print("JSON: \(JSON["data"]!["name"]!)") 
     } 
} 
} 

und ich bekomme diese Fehlermeldung

fatal error: unexpectedly found nil while unwrapping an Optional value

Jede Idee, warum?

+0

drucken ("JSON: \ (JSON)") wäre ein guter Anfang. Sie sind gezwungen, sowohl "Daten" als auch "Name" auszupacken. Entweder kann es einmal fehlschlagen, wenn Sie sagen, dass Ihr JSON etwas anderes ist, als Sie erwarten. In jedem Fall ist es nicht empfehlenswert, in solchen Fällen das Auspacken zu forcieren, besser ein "wenn" zu verwenden. Könnte ein 'Fehler-JSON' irgendeiner Art sein. – bauerMusic

Antwort

0

Ok das war einfach ich denke, und es hat nicht die Frage wert, aber das ist die Lösung

Alamofire.request(.GET, "https://graph.facebook.com/search", parameters: ["q": "", "type": "place", "center": "37.928319,23.7036673", "distance": "10000", "access_token": "475827182628380|6U-mk-1etGQHwrXRSMF4Ht2zOyc", "expires_in": "5184000"]) 
      .responseJSON { (responseData) -> Void in 
       if((responseData.result.value) != nil) { 
        let swiftyJsonVar = JSON(responseData.result.value!) 

        if let resData = swiftyJsonVar["data"].arrayObject { 
         self.arrRes = resData as! [[String:AnyObject]] 
        } 
        if self.arrRes.count > 0 { 
         self.kati.reloadData() 
        } 
       } 
     } 

Und an der Zell

override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 
    let cell = tableView.dequeueReusableCellWithIdentifier("checkInCell", forIndexPath: indexPath) 
    var dict = arrRes[indexPath.row] 
    cell.textLabel?.text = dict["name"] as? String 
    //cell.detailTextLabel?.text = dict["email"] as? String 
    return cell 
} 

gerade nicht vergessen SwiftyJSON auch nutzen zu können!