ios - UITableView Crashes on Segue to View Controller -


cause of crash

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

crash 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: like this

after assigning go , connect tableview tableview in overview , 2 actions in newworkout.

this work.


Comments

Popular posts from this blog

javascript - Create a stacked percentage column -

Optimising Firebase database by automatically overwriting data -

javascript - Angular UI-Grid customTemplate directive causing rows to load slowly/? -