2017-02-06 18 views
0

У меня есть два основных объекта данных, каждый из которых имеет отношение ко многим. Я использую tableView, чтобы пользователи могли выбирать, какие типы зарплат связаны с данным предложением. Проект Swift 3, iOS 10.2.1, и я использую подклассы NSManagedObject из меню «Редактор».сбой при сбое данных при добавлении более 5 связанных объектов

Все это отлично работает, пока я не попытаюсь добавить шестой класс зарплаты к предложению. Примечание. Если я попытаюсь добавить любое значение, отличное от первых 5, в массив WageClass, он сработает. Но когда я печатаю массив, он печатает столько значений, сколько есть в массиве. Приложение аварийно завершает работу с ошибкой: неожиданно найдено нуль при развертывании необязательного значения.

Я также получаю сообщение об ошибке Thread 1: EXC_BREAKPOINT, но навигатор Breakpoints и lldb не имеют точек останова.

Я тестировал это, пытаясь добавить классовые кластеры индивидуально, добавив их в разные порядки и создав до десяти классов wageClasses (чтобы увидеть, была ли проблема с последним созданным wageClass, не загружаемым в tableView) но не повезло, я получаю тот же результат.

Вот где я добавляю:

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 
    let cell = tableView.dequeueReusableCell(withIdentifier: "AddWageClassCell", for: indexPath) 

    let wageClass = wageClasses[indexPath.row] 


    let wageClassStatus = wageClass.value(forKey: "checked") as? Bool ?? true 

    cell.textLabel?.text = wageClass.value(forKey: "wageClassName") as? String 

    var accessoryType = UITableViewCellAccessoryType.none 
    var tintColor = UIColor.clear 

    if (wageClassStatus) { 
     accessoryType = UITableViewCellAccessoryType.checkmark 
     tintColor = UIColor.green 

    } 

    cell.accessoryType=accessoryType 
    cell.tintColor = tintColor 


    return cell 

} 

    func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) 
    { 


     let wageClassObject = self.wageClasses[indexPath.row] 

     var wageClassStatus = wageClassObject.value(forKey: "checked") as? Bool ?? false 

     wageClassObject.setValue(!wageClassStatus, forKey:"checked") 





     proposalToEdit?.addToWageClasses(wageClassObject) 




     do { 
      try 
      ad.saveContext() 
     } catch let error as NSError { 
      print("Cannot save object: \(error), \(error.localizedDescription)") 
     } 

     tableView.deselectRow(at: indexPath,animated:false) 

     tableView.reloadRows(at: [indexPath], with: .none) 






    } 

Спасибо за ваши комментарии!

+0

Система сообщает вам следующее: «У вас есть необязательное значение«? », И оно возвращается как« nil ».« Nil »на самом деле ничего. Вы должны разворачивать его!». – Mannopson

+0

Любая идея почему это позволяет мне добавлять первые пять без жалобы? Почему это только шестой, что он считает нулевым? – camelCaseUpInYourFace

+0

Коды такого же типа работают раньше? Зачем вам шесть из них? Я имею в виду отношения. один из шести контроллеров табличного представления? – Mannopson

ответ

0

Я, наконец, понял, что я был силой разворачивания переменной, когда я отформатировал ячейку с wageClasses на отдельной таблицеView на отдельном xib. Когда я завернул это в аннулирование, если в заявлении с аннулированием

if let cell = tableView.cellForRow(at: indexPath) as? WageCell { 
       configureCell(cell: cell, indexPath: indexPath as NSIndexPath) 
      } else { 
       print("something is nil") 
      } 

      } 

катастрофа ушла.