2017-02-06 7 views
0

두 개의 핵심 데이터 엔티티가 있는데, 각각 다른 엔티티와의 관계가 많습니다. tableView을 사용하여 사용자가 주어진 제안과 관련된 wageClasses를 선택할 수 있습니다. 프로젝트는 Swift 3, iOS 10.2.1이며 편집기 메뉴에서 NSManagedObject 하위 클래스를 사용하고 있습니다.5 개 이상의 관련 개체를 추가 할 때 핵심 데이터 응용 프로그램이 작동하지 않습니다.

제안서에 여섯 번째 wageClass를 추가 할 때까지이 모든 기능이 훌륭합니다. 참고 : WageClass 배열에 처음 5 개 이외의 값을 추가하려고하면 충돌이 발생합니다. 그러나 배열을 인쇄 할 때 배열에있는 값만큼 인쇄합니다. 앱이 오류로 인해 충돌합니다. 예기치 않게 찾지 못하면 선택 값을 래핑하지 않습니다.

또한 스레드 1 : EXC_BREAKPOINT 오류가 발생하지만 중단 점 탐색기와 lldb는 중단 점을 표시하지 않습니다.

나는 wageClasses를 개별적으로 추가하고, 다른 순서로 추가하고, 최대 wageClasses를 생성하여 이것을 테스트했습니다 (tableView에로드되지 않은 마지막으로 생성 된 wageClass의 문제점인지 확인하기 위해) 그러나 운이 없다, 나는 같은 결과를 얻는다. 내가 추가 해요 곳

은 다음과 같습니다 귀하의 의견에 대한

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'은 실제로 아무것도 아닙니다. 반드시 'unwrap'해야합니다. ''. – Mannopson

+0

아이디어 왜 처음 5 개를 불만없이 추가 할 수 있습니까? 왜 그 숫자가 여섯 번째로 밖에 없습니까? – camelCaseUpInYourFace

+0

이전에 같은 종류의 코드가 작동 했습니까? 왜 6 개가 필요한가요? 6 테이블 뷰 컨트롤러? – Mannopson

답변

0

마지막으로 별도의 xib에 별도의 tableView에 wageClasses으로 셀 서식을 지정할 때 변수의 래핑을 강제로 수행한다는 것을 알았습니다. if let 문에 포장했을 때

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

      } 

충돌이 사라졌습니다.