我对tableView的内容有疑问。它没有向我展示我要求的领域对象。这是我的代码: 在类的顶部我声明了这个变量:
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中很新,我找不到问题。谓词是错误的吗?我会感谢任何帮助!如果您需要更多信息,例如数据模型等,请随时询问
答案 0 :(得分:1)
由于您没有包含模型的代码,因此无法确定您的谓词是否正确。
我能说的是TrainingPlan
上有一个exercises
属性,您应该使用它而不是查询相同的东西。
您只需将excercisesFromPlan
更改为List
而不是Results
var excercisesFromPlan: List<Excercise>?
并更改loadExcercisesFromPlan
以获取
func loadExcercisesFromPlan() {
excercisesFromPlan = plan?.excercises
}