2016-12-07 6 views
-1

enter code here Я пытаюсь добавить функцию календаря в свое приложение, но у меня есть 2 ошибки на двух разных диспетчерах просмотров, я не могу узнать, что мне не хватает.Календарь в Swift 3

Ошибка говорит:

Значение типа AddEventViewController не имеет ни один из членов "Календаря" на линии addEventVC.calendar = календарного

2nd viewcontroller

1st viewcontroller

Код:

import UIKit 
import EventKit 

class EventsViewController: UIViewController, UITableViewDataSource, EventAddedDelegate { 

    @IBOutlet weak var tableView: UITableView! 

    var calendar: EKCalendar! 
    var events: [EKEvent]? 

    @IBOutlet weak var eventsTableView: UITableView! 

    override func viewDidLoad() { 
     super.viewDidLoad() 
     loadEvents() 
    } 

    func loadEvents() { 
     let dateFormatter = DateFormatter() 
     dateFormatter.dateFormat = "yyyy-MM-dd" 

     let startDate = dateFormatter.date(from: "2016-01-01") 
     let endDate = dateFormatter.date(from: "2016-12-31") 

     if let startDate = startDate, let endDate = endDate { 
      let eventStore = EKEventStore() 

      let eventsPredicate = eventStore.predicateForEvents(withStart: startDate, end: endDate, calendars: [calendar]) 

      self.events = eventStore.events(matching: eventsPredicate).sorted { 
       (e1: EKEvent, e2: EKEvent) in 

       return e1.startDate.compare(e2.startDate) == ComparisonResult.orderedAscending 
      } 
     } 
    } 

    func numberOfSections(in tableView: UITableView) -> Int { 
     return 1 
    } 

    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 
     if let events = events { 
      return events.count 
     } 

     return 0 
    } 

    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 
     let cell = tableView.dequeueReusableCell(withIdentifier: "basicCell")! 
     cell.textLabel?.text = events?[(indexPath as NSIndexPath).row].title 
     cell.detailTextLabel?.text = formatDate(events?[(indexPath as NSIndexPath).row].startDate) 
     return cell 
    } 

    func formatDate(_ date: Date?) -> String { 
     if let date = date { 
      let dateFormatter = DateFormatter() 
      dateFormatter.dateFormat = "MM/dd/yyyy" 
      return dateFormatter.string(from: date) 
     } 

     return "" 
    } 

    override func prepare(for segue: UIStoryboardSegue, sender: Any?) { 
     let destinationVC = segue.destination as! UINavigationController 

     let addEventVC = destinationVC.childViewControllers[0] as! AddEventViewController 
     addEventVC.calendar = calendar 
     addEventVC.delegate = self 
    } 

    // MARK: Event Added Delegate 
    func eventDidAdd() { 
     self.loadEvents() 
     self.eventsTableView.reloadData() 
    } 

} 

AddEventViewController:

класс AddEventViewController: UIViewController {

@IBOutlet weak var eventNameTextField: UITextField! 
@IBOutlet weak var eventStartDatePicker: UIDatePicker! 
@IBOutlet weak var eventEndDatePicker: UIDatePicker! 

var delegate: EventAddedDelegate? 

override func viewDidLoad() { 
    super.viewDidLoad() 
    // Do any additional setup after loading the view, typically from a nib. 
    self.eventStartDatePicker.setDate(initialDatePickerValue(), animated: false) 
    self.eventEndDatePicker.setDate(initialDatePickerValue(), animated: false) 
} 

func initialDatePickerValue() -> Date { 
    let calendarUnitFlags: NSCalendar.Unit = [.year, .month, .day, .hour, .minute, .second] 

    var dateComponents = (Calendar.current as NSCalendar).components(calendarUnitFlags, from: Date()) 

    dateComponents.hour = 0 
    dateComponents.minute = 0 
    dateComponents.second = 0 

    return Calendar.current.date(from: dateComponents)! 
} 
@IBAction func cancelButtonTapped(_ sender: UIButton) { 
    self.dismiss(animated: true, completion: nil) 
} 

@IBAction func addEventButtonTapped(_ sender: UIButton) { 
    // Create an Event Store instance 
    let eventStore = EKEventStore(); 

    // Use Event Store to create a new calendar instance 
    if let calendarForEvent = eventStore.calendar(withIdentifier: self.calendar.calendarIdentifier) 
    { 
     let newEvent = EKEvent(eventStore: eventStore) 

     newEvent.calendar = calendarForEvent 
     newEvent.title = self.eventNameTextField.text ?? "Some Event Name" 
     newEvent.startDate = self.eventStartDatePicker.date 
     newEvent.endDate = self.eventEndDatePicker.date 

     // Save the event using the Event Store instance 
     do { 
      try eventStore.save(newEvent, span: .thisEvent, commit: true) 
      delegate?.eventDidAdd() 

      self.dismiss(animated: true, completion: nil) 
     } catch { 
      let alert = UIAlertController(title: "Event could not save", message: (error as NSError).localizedDescription, preferredStyle: .alert) 
      let OKAction = UIAlertAction(title: "OK", style: .default, handler: nil) 
      alert.addAction(OKAction) 

      self.present(alert, animated: true, completion: nil) 
     } 
    } 

} 

}

+0

@ EricAya Извините, я не заметил, что фото не было загружено. Исправлено: – Jaroslav

+1

Не размещайте фотографии. Скопируйте и вставьте фактический код в свой вопрос. И скопируйте и вставьте сообщение об ошибке в виде текста. – rmaddy

+0

Вам необходимо опубликовать код для AddEventViewController –

ответ

1

Вы звоните addEventVC.calendar = calendar, но ваш AddEventViewController не имеет переменную calendar поэтому вы получите ошибку AddEventViewController не имеет имени «Календарь».

Смежные вопросы