ios - UITableView Crashes on Segue to View Controller -
click image above brief view of segue. app workout tracker. have class makes workout object properties such workout name, description, etc. have object creates workoutlist, array of workout objects.
i have uitableview , button above lets user create new workout , adds workoutlist array.
the crash happens whenever click "create new workout" segues new view controller. error
import uikit class viewcontroller: uiviewcontroller, uitableviewdelegate, uitableviewdatasource { @iboutlet weak var setstepper: uilabel! @iboutlet weak var repstepper: uilabel! @iboutlet weak var workoutname: uitextfield! @iboutlet weak var workoutdescription: uitextfield! @iboutlet weak var tableview: uitableview! var workoutlist = workoutlist().listofworkouts override func viewdidload() { super.viewdidload() tableview.delegate = self tableview.datasource = self } override func didreceivememorywarning() { super.didreceivememorywarning() // dispose of resources can recreated. } @ibaction func steppercounter(_ sender: uistepper) { if sender.tag == 1 { setstepper.text = "\(int(sender.value))" } else if sender.tag == 2 { repstepper.text = "\(int(sender.value))" } } @ibaction func addtoworkout(_ sender: any) { //i know terrible fixing later. testing right let newworkout : workout = workout(name: workoutname.text!, description: workoutdescription.text!, sets: int(setstepper.text!)!, reps: int(repstepper.text!)!) workoutlist.append(newworkout) print(workoutlist.count) } func tableview(_ tableview: uitableview, numberofrowsinsection section: int) -> int { return workoutlist.count } func tableview(_ tableview: uitableview, cellforrowat indexpath: indexpath) -> uitableviewcell { let cell = uitableviewcell() cell.textlabel?.text = "hello" return cell } }
it looks using same viewcontroller both views in storyboard. means, when push "addnewworkoutcontroller" viewdidload expects tableview - not there, because storyboard didn't build view.
you should create 2 vcs. 1 overview "add new button" , tableview , 1 creating it.
here full solution:
create 2 new swift files:
overviewviewcontroller.swift & newworkoutviewcontroller.swift
i separated code 2 vc's:
import uikit class overviewviewcontroller: uiviewcontroller, uitableviewdelegate, uitableviewdatasource { @iboutlet weak var tableview: uitableview! var workoutlist = workoutlist().listofworkouts override func viewdidload() { super.viewdidload() tableview.delegate = self tableview.datasource = self } override func didreceivememorywarning() { super.didreceivememorywarning() // dispose of resources can recreated. } func tableview(_ tableview: uitableview, numberofrowsinsection section: int) -> int { return workoutlist.count } func tableview(_ tableview: uitableview, cellforrowat indexpath: indexpath) -> uitableviewcell { let cell = uitableviewcell() cell.textlabel?.text = "hello" return cell } } and
import uikit class newworkoutviewcontroller: uiviewcontroller { @iboutlet weak var setstepper: uilabel! @iboutlet weak var repstepper: uilabel! @iboutlet weak var workoutname: uitextfield! @iboutlet weak var workoutdescription: uitextfield! override func viewdidload() { super.viewdidload() } override func didreceivememorywarning() { super.didreceivememorywarning() // dispose of resources can recreated. } @ibaction func steppercounter(_ sender: uistepper) { if sender.tag == 1 { setstepper.text = "\(int(sender.value))" } else if sender.tag == 2 { repstepper.text = "\(int(sender.value))" } } @ibaction func addtoworkout(_ sender: any) { //i know terrible fixing later. testing right let newworkout : workout = workout(name: workoutname.text!, description: workoutdescription.text!, sets: int(setstepper.text!)!, reps: int(repstepper.text!)!) workoutlist.append(newworkout) print(workoutlist.count) } } now go storyboard, select controllers , assign right classes: 
after assigning go , connect tableview tableview in overview , 2 actions in newworkout.
this work.
Comments
Post a Comment