2016-04-12 10 views
0

Dies ist die Funktion, die ich zum Abfragen der Datenbank verwenden:PFQuery mit mehreren Arrays in UITableView

func loadRestaurantMeals(){ 
     let mealsQuery = PFQuery(className: "Meals") 
     mealsQuery.whereKey("Restaurant", equalTo: selectedRestaurant!) 
     mealsQuery.whereKey("MealCategory", equalTo: selectedMenuHeading!) 
     mealsQuery.findObjectsInBackgroundWithBlock{ (objects: [PFObject]?, error: NSError?) -> Void in 
      if error == nil{ 
       //after successfull fetch 
       if let fetchedMeals = objects{ 
        print("c") 

        for fetchedMeal in fetchedMeals{ 
         print("writing to name") 
         self.restaurantMealsArray.append(fetchedMeal.objectForKey("MealName") as! String) 
         print("writing to description") 
         self.mealsDescriptionArray.append(fetchedMeal.objectForKey("MealDescription") as! String) 
         print("writing to price") 
         self.mealsPriceArray.append(fetchedMeal.objectForKey("MealPrice") as! Double) 
        } 

        //display content 
        print("before reload data") 
        self.mealsTableView.reloadData() 
        print("reload data") 
       } 
      }else{ 
       // Log details of the failure 
       print("Error: \(error!) \(error!.userInfo)") 
      } 
     } 
    } 

Hier sind alle UITableView Funktionen:

func numberOfSectionsInTableView(tableView: UITableView) -> Int { 
     return 1 
    } 

    func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 
     return restaurantMealsArray.count 
    } 

    func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 
     var cell = tableView.dequeueReusableCellWithIdentifier("mealCell", forIndexPath: indexPath) as UITableViewCell 
     print("a") 
     cell.textLabel?.text = restaurantMealsArray[indexPath.row] 
     print("b") 
     cell.detailTextLabel?.text = mealsDescriptionArray[indexPath.row] 
     print("c") 
     //cell.label 
     return cell 
    } 

Aus irgendeinem Grund die reloadData() nie genannt wird, . Die Konsole meldet den folgenden Fehler:

fatal error: unexpectedly found nil while unwrapping an Optional value

Was die Ursache dafür sein könnte?

+0

Auf welcher Linie genau erhalten Sie die Ausnahme? – Lasse

+0

Haben Sie versucht, fetchedMeal zu drucken? MealName, MealDescription, MealPrice-Typen sind nicht optional. – ridvankucuk

+0

Dieser Fehler wird nur angezeigt, sobald ich die App ausgeführt und diesen spezifischen Tabellenansichtcontroller eingegeben habe –

Antwort

0

Ich nehme an, die Probleme durch die folgende Zeile verursacht:

self.mealsPriceArray.append(fetchedMeal.objectForKey("MealPrice") as! Double) 

objectForKey gibt ein Objekt zurück, aber sie zwang konvertieren zu Double was nicht funktioniert. Versuchen Sie folgendes:

self.mealsPriceArray.append((fetchedMeal.objectForKey("MealPrice") as! NSNumber).doubleValue) 

(vorausgesetzt, Ihr mealsPriceArray ist ein [Double])

Besser noch: Da Sie nie sicher, ob der Daten sein, können Sie aus externen Quellen erhalten Sie wirklich ? statt ! verwenden sollten für den mealPrice und die anderen Datenfelder auch:

if let mealPrice = fetchedMeal.objectForKey("MealPrice") as? NSNumber { 
    self.mealsPriceArray.append(mealPrice.doubleValue) 
}