2016-06-06 6 views
0

Ich habe einen Endpunkt, sagen wir: "http://somthing.com/api/ios". Ich hole JSON von diesem Endpunkt.Wie verarbeitet man die Antwort von einer API, bevor die Antwort von UICollection Datasource gelesen wird?

Ich rufe die API in viewWillAppear Methode.

func viewWillAppear(animated: Bool) 
{ 
    super.viewWillAppear(true) 

    Alamofire.request(.GET, url) 
       .responseJSON { response in 

        if let JSON = response.result.value 
        { 
         self.receiveData = JSON as! [String : AnyObject] 

        } 
      } 
} 

Hier dumping ich die Daten in der lokalen Variablen.

Und das ist UICollectionView Datenquelle, die bricht, weil receiveData ist leer oder ein anderes Problem ist da.

func collectionView(collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int { 
    switch collectionView.tag 
    { 
    case 0: 
     return (receiveData["x"]?.count)! 
    case 1: 
     return (receiveData["y"]?.count)! 
    case 2: 
     return (receiveData["z"]?.count)! 
    default: 
     return 0 
    } 
} 

ich die Collectiondatasource bin Verdacht wird zuerst genannt, bevor receiveData bevölkert wird.

Kann jemand sagen, wo ich falsch liege oder gibt es eine andere Problemumgehung?

EDIT 1: Anbringen des Screenshot des Fehlers: enter image description here

+0

Eigentlich ist meine Sammlung Ansicht in einer Tablview-Zelle. Anstatt die Sammlungsansicht neu zu laden, lade ich die Tablview, die du erwähnt hast, neu und rufe die Methode collectionview.reloadData() in der Methode willDisplayCell auf. Trotzdem bekomme ich denselben Fehler. –

Antwort

2

Ihre Sammlung Ansicht neu laden, nachdem Sie die Daten zu empfangen.

Angenommen, collectionView ist der Name Ihres collectionView, fügen Sie einfach self.collectionView.reloadData() nach Ihrem if Block hinzu.

+0

Ich bin immer noch fest. Könnten Sie bitte meinen Kommentar zu Frage und den beigefügten Screenshot in der Frage sehen. –

+0

Welchen Fehler zeigt es? – ebby94

+0

Ich kann die Fehlermeldung im Screenshot nicht sehen. Können Sie die genaue Fehlermeldung posten, die Sie in der Konsole erhalten? – ebby94

4

Sie müssen die UICollectionView erneut laden, nachdem Sie die Antwort empfangen und in receiveData zugewiesen haben.

func viewWillAppear(animated: Bool) { 
    super.viewWillAppear(true) 

    Alamofire.request(.GET, url) 
       .responseJSON { response in 

        if let JSON = response.result.value 
        { 
         self.receiveData = JSON as! [String : AnyObject] 
        } 
       //Add this line 
       self.collectionView.reloadData() 

      } 
    } 
+0

Meine Ansicht befindet sich tatsächlich in einer Tablview-Zelle. Anstatt die Sammlungsansicht neu zu laden, lade ich die Tablview neu, in der du erwähnt hast, und rufe die Methode collectionview.reloadData() in der Methode ** willDisplayCell ** auf. Immer noch bekomme ich den gleichen Fehler. –

+0

Sie müssen das TableView nach der if-Methode in der viewWillAppear-Methode neu laden und die collectionView innerhalb der tableview-Methode neu laden, zB in dieser Methode: -> func tableView (tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {} –

+0

Du hast gesagt, immer noch den gleichen Fehler. Ich habe den Screenshot in der Fragebeschreibung angehängt, mal schauen. –

Verwandte Themen