2016-12-07 1 views
-1

enter code here 내 캘린더 기능을 앱에 추가하려고하지만 두 개의 다른 viewcontroller에서 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) 
     } 
    } 

} 

} 당신은 당신이 오류가 이유입니다 calendar라는 변수가없는 addEventVC.calendar = calendar하지만 AddEventViewController를 호출

+0

@ EricAya 미안하지만 사진이 업로드되지 않았다는 것을 알지 못했습니다. 고정 – Jaroslav

+1

사진을 게시하지 마십시오. 실제 코드를 복사하여 귀하의 질문에 붙여 넣으십시오. 그리고 오류 메시지를 복사하여 텍스트로 붙여 넣습니다. – rmaddy

+0

AddEventViewController 코드를 게시해야합니다. –

답변

1

AddEventViewController에는 "Calendar"멤버가 없습니다.