JTAppleCalender throw error when placing in viewDidAppear Event

57 Views Asked by At

I m using below video as a reference for JTAppleCalendar.

https://www.youtube.com/watch?v=CQNotydm58s&t=19s

I place the code in viewDidAppear Event and I got below error msg:

Problem:
error msg 1: Thread: EXC_BAD_ACCESS(code=EXC_i386_GPFLT) for below.

override open func layoutSubviews() {
    super.layoutSubviews()
    if !delayedExecutionClosure.isEmpty, isCalendarLayoutLoaded {
        executeDelayedTasks()
    }
}

The Code is as follows:

import UIKit
import JTAppleCalendar

override func viewDidAppear(_ animated: Bool) {
    super.viewDidAppear(animated)

    DispatchQueue.global().asyncAfter(deadline: .now()) {
        let serverObjects = self.getServerEvents()
        for(date, event) in serverObjects {
            let stringDate = self.formatter.string(from: date)
            self.eventsFromTheServer[stringDate] = event
        }

        DispatchQueue.main.async{
            self.calendarView.reloadData()
        }
    }

    calendarView.minimumLineSpacing = 0
    calendarView.minimumInteritemSpacing = 0

    calendarView.scrollToDate(Date(), animateScroll: true)
    calendarView.selectDates([Date()])

    calendarView.visibleDates { dateSegment in
        self.setupCalendarView(dateSegment: dateSegment)
    }
}

Error Msg 2, when placing in viewDidLoad Event:

error Msg :

Attempt to present LoginViewController on ( this project Name ) whose view is not in the window hierarchy!

override func viewDidLoad() {
        super.viewDidLoad()


// Do any additional setup after loading the view.


let defaults = UserDefaults.standard



if defaults.object(forKey: "SessionToken") == nil {


let VC = self.storyboard?.instantiateViewController(withIdentifier: "LoginViewController") as! LoginViewController


self.dismiss(animated: false)

self.present(VC,animated:false)


}else {




 //-- have session token show below:
 DispatchQueue.global().asyncAfter(deadline: .now()) {

   let serverObjects = self.getServerEvents()

  for(date, event) in serverObjects {

  let stringDate = self.formatter.string(from: date)

     self.eventsFromTheServer[stringDate] = event

    }

 DispatchQueue.main.async{

      self.calendarView.reloadData()
 }

}


   calendarView.minimumLineSpacing = 0
   calendarView.minimumInteritemSpacing = 0

   calendarView.scrollToDate(Date(), animateScroll: true)
   calendarView.selectDates([Date()])


   calendarView.visibleDates { dateSegment in

  self.setupCalendarView(dateSegment: dateSegment)
   }

        }
    }

Please help.

Thanks

0

There are 0 best solutions below