2016-12-07 24 views
-1

enter code here Ich versuche, eine Kalenderfunktion zu meiner App hinzuzufügen, aber ich habe 2 Fehler auf zwei verschiedenen Viewcontrollern, ich kann nicht herausfinden, was ich vermisse.Kalender in Swift 3

Der Fehler sagt:

Wert vom Typ AddEventViewController hat kein Mitglied "Kalender" auf der Linie addEventVC.calendar = Kalender

2nd viewcontroller

1st viewcontroller

Code:

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:

Klasse 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 Sorry, ich habe nicht bemerkt, dass die Bilder nicht hochgeladen wurden. Behoben – Jaroslav

+1

Keine Bilder posten. Kopieren und fügen Sie den tatsächlichen Code in Ihre Frage ein. Und kopieren Sie und fügen Sie Fehlermeldung als Text ein. – rmaddy

+0

Sie müssen den Code für AddEventViewController –

Antwort

1

Sie rufen addEventVC.calendar = calendar aber Ihre AddEventViewController keine Variable namens calendar, weshalb Sie den Fehler AddEventViewController hat kein Mitglied "Kalender".