Ios Can';t将领域数据从tableViewController传递到viewController
我很难将领域对象的数据从tableViewController传递到viewController。我想从表中选择一个对象,并在下面的viewController中使用该对象的数据。我在这里很难找到处理领域对象的资源,而不仅仅是传递字符串之类的东西。任何援助都将是巨大的 以下是我尝试创建第二个视图的segue函数的TableViewController:Ios Can';t将领域数据从tableViewController传递到viewController,ios,swift,realm,Ios,Swift,Realm,我很难将领域对象的数据从tableViewController传递到viewController。我想从表中选择一个对象,并在下面的viewController中使用该对象的数据。我在这里很难找到处理领域对象的资源,而不仅仅是传递字符串之类的东西。任何援助都将是巨大的 以下是我尝试创建第二个视图的segue函数的TableViewController: class WorkoutController: UITableViewController { override func view
class WorkoutController: UITableViewController {
override func viewDidLoad() {
super.viewDidLoad()
}
override func numberOfSections(in tableView: UITableView) -> Int {
return 1
}
override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return DBHelper.shared.getWorkout().count
}
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
var cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath)
if cell == nil {
cell = UITableViewCell(style: .default, reuseIdentifier: "cell")
}
let muscle = DBHelper.shared.getWorkout()[indexPath.row]
cell.textLabel?.text = muscle
return cell
}
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
let workoutDetailVC = segue.destination as! WorkoutDetail
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
let name = DBHelper.shared.getWorkout()[indexPath.row]
workoutDetailVC.receivedName = name
}
}
}
下面是WorkoutDetail类,它应该接收并显示数据:
class WorkoutDetail: UIViewController {
@IBOutlet weak var muscleLabel: UILabel!
var receivedName = ""
override func viewDidLoad() {
super.viewDidLoad()
muscleLabel.text = receivedName
}
}
下面是上面引用的getWorkout()函数:
func getWorkout()-> [String] {
var musclesName = [String]()
let storedExercise = realm.objects(Workout1.self)
for exercise in storedExercise {
musclesName.append(exercise.exercise)
}
return musclesName
}
我在这方面遇到了实际困难,非常感谢您的帮助。获取
didSelectRowAt
退出prepare
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
var cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath)
if cell == nil {
cell = UITableViewCell(style: .default, reuseIdentifier: "cell")
}
let muscle = DBHelper.shared.getWorkout()[indexPath.row]
cell.textLabel?.text = muscle
return cell
}
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
let name = DBHelper.shared.getWorkout()[indexPath.row]
self.performSegue(withIdentifier:"SegueName",sender:name)
}
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
let workoutDetailVC = segue.destination as! WorkoutDetail
workoutDetailVC.receivedName = sender as! String
}
感谢您的回复,我已将此添加到我的代码中,它已生成并运行,但当我尝试在模拟器中执行此步骤时,我收到错误“无法将'UITableViewCell'类型的值强制转换为'NSString'。它是'self.performsgue()'代码段中的
,sender:name)
而不是,sender:self)
?因为这是我在我的项目中所拥有的。我对您的响应所做的唯一更改是在performsgue
Yes中的functionyes处向didSelectRow添加“override”,这是我所拥有的,但我仍然收到错误,当我尝试segue时,还有一个“Thread 1:SIGABRT”错误。您没有将领域对象传递给第二个视图控制器。您正在传递一个字符串,因此它的处理方式与传递任何其他字符串一样。另外,为什么在prepare(用于段)中有一个tableview委托函数didSelectRow:at
?