2016-11-23 62 views
1

我有一個tableView的內容有問題。它沒有顯示我要求的領域對象。這裏是我的代碼: 在類的頂部,我宣佈這個變量:UITableView不顯示它應該顯示的領域對象

let newPlan = TrainingPlan() 

然後,我有這個按鈕的動作,這是複製的鍛鍊對象,把它們放在一個陣列的這種添加的境界。我這樣做,因爲我只是想改變這個複製的數組:

@IBAction func savePlanAction(_ sender: AnyObject) { 
    if planNameTextField.text!.isEmpty{ 
     planNameFehlerLabel.isHidden = false 
    } 
    else{ 
     newPlan.name = planNameTextField.text! 
     newPlan.creationDate = NSDate() as Date 
     let selectedExcercises = loadSelectedExcercises() 
     if selectedExcercises != nil{ 
      for var i in (0..<selectedExcercises!.count){ 
       excerciseCopies.append(selectedExcercises![i]) 
       do{ 
        try realm.write{ 
         realm.add(excerciseCopies[i]) 
        } 
       } 
       catch{ 
        print(error) 
       } 
      } 
      try! realm.write{ 
       realm.add(newPlan) 
      } 
      for object in excerciseCopies { 
       do{ 
        try realm.write{ 
         newPlan.excercises.append(object) 
       } 
       } 
       catch{ 
        print(error) 
       } 
      } 
      performSegue(withIdentifier: "savePlan", sender: self) 
     } 
     else{ 
      uebungFehlerLabel.isHidden = false 
     } 
    } 
} 

然後我給newPlan的對象到另一個對象的ViewController:

override func prepare(for segue: UIStoryboardSegue, sender: Any?) { 
    if segue.identifier! == "savePlan" { 
     let tct = segue.destination as! TrainingPlanConfTableViewController 
     tct.plan = newPlan 
    } 
} 

現在隔壁班我想告訴所有運動的物體從在的tableView複製的陣列,但的tableView不顯示任何東西:

class TrainingPlanConfTableViewController: UITableViewController { 

//Properties 
let realm = try! Realm() 
var excercisesFromPlan: Results<Excercise>?{ 
    didSet{ 
     tableView.reloadData() 
    } 
} 
var plan: TrainingPlan? 

//Lifecycle 
override func viewWillAppear(_ animated: Bool) { 
    super.viewWillAppear(animated) 

    loadExcercisesFromPlan() 
} 

//Request 
func loadExcercisesFromPlan(){ 
    if plan != nil{ 
     let predicate = NSPredicate(format: "trainingsplan = %@", plan!) 
     excercisesFromPlan = realm.objects(Excercise.self).filter(predicate) 
    } 
} 

//Tableview Funktionen 
override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 
    if excercisesFromPlan != nil{ 
    return excercisesFromPlan!.count 
} 
    return 0 
} 

override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 
    let cell: TrainingPlanConfTableViewCell = tableView.dequeueReusableCell(withIdentifier: "PlanConfCell") as! TrainingPlanConfTableViewCell 
    let excercise = excercisesFromPlan![indexPath.row] 
    cell.nameLabel.text = excercise.name 
    return cell 
} 

}

我在Swift中很新,而且找不到問題。謂詞是否錯誤?我會感謝任何幫助!如果您需要更多信息,例如數據模型等,請隨時詢問

回答

1

由於您沒有包含模型的代碼,因此無法確定您的謂詞是否正確。

我可以告訴的是TrainingPlan上有一個exercises屬性,你應該使用,而不是查詢同樣的事情。

你只需要改變excercisesFromPlan是一個List代替Results

var excercisesFromPlan: List<Excercise>? 

,改變loadExcercisesFromPlan得到它

func loadExcercisesFromPlan() { 
    excercisesFromPlan = plan?.excercises 
} 
+0

感謝您的幫助!下次我會立即發佈模型,但現在它工作! – Marcel