2016-04-12 3 views
0

Это функция я использую для запросов к базе данных:PFQuery с несколькими массивов в 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)") 
      } 
     } 
    } 

Здесь все UITableView функции:

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 
    } 

По какой-то причине, reloadData() никогда не вызывается , консоль сообщает следующее сообщение об ошибке:

fatal error: unexpectedly found nil while unwrapping an Optional value

Что может быть причиной этого?

+0

На какой линии вы получаете исключение? – Lasse

+0

Вы пытались напечатать fetchedMeal? MealName, MealDescription, MealPrice не являются необязательными. – ridvankucuk

+0

Эта ошибка отображается только после запуска приложения и ввода этого конкретного контроллера просмотра таблицы –

ответ

0

Я полагаю, проблема вызвана следующей строкой:

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

objectForKey возвращает объект, но вы принудительно преобразовать в Double, который не работает. Попробуйте это:

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

(предполагается, что ваш mealsPriceArray является [Double])

еще лучше: Поскольку вы никогда не можете быть уверены, что данные, которые вы получаете от любого внешнего источника, вы действительно должны использовать ? вместо ! для едыЦена и другие поля данных:

if let mealPrice = fetchedMeal.objectForKey("MealPrice") as? NSNumber { 
    self.mealsPriceArray.append(mealPrice.doubleValue) 
} 
Смежные вопросы