2016-06-29 2 views
0

Я новичок в быстрой и я практикую «Добавление событий календаря» с этого сайта: http://www.ioscreator.com/tutorials/add-event-calendar-tutorial-ios8-swift, но я получаю следующие ошибки в строкеДобавить событие в календарь в iOS8 с Swift

let result = store.saveEvent(event, span: .ThisEvent, commit: error) 
  • Call can throw, but it is not marked with 'try' and the error is not handled
  • Cannot convert value of type 'NSError?' to expected argument type 'Bool'

Код:

import UIKit 
import EventKit 

class ViewController: UIViewController { 
    override func viewDidLoad() { 
     super.viewDidLoad() 
     let eventStore = EKEventStore() 
     switch EKEventStore.authorizationStatusForEntityType(EKEntityType.Event) { 
     case .Authorized: 
      insertEvent(eventStore) 
     case .Denied: 
      print("Access denied") 
     case .NotDetermined: 
      // 3 
      eventStore.requestAccessToEntityType(EKEntityType.Event, completion: 
       {[weak self] (granted: Bool, error: NSError?) -> Void in 
        if granted { 
         self!.insertEvent(eventStore) 
        } else { 
         print("Access denied") 
        } 
       }) 
     default: 
      print("Case Default") 
     } 

    } 

    override func didReceiveMemoryWarning() { 
     super.didReceiveMemoryWarning() 
     // Dispose of any resources that can be recreated. 
    } 

    func insertEvent(store : EKEventStore){ 
     let calendars = store.calendarsForEntityType(EKEntityType.Event) as! [EKCalendar] 
     for calendar in calendars{ 
      if calendar.title == "ioscreater"{ 
       let startDate = NSDate() 
       let endDate = startDate.dateByAddingTimeInterval(2*60*60) 
       //Create event 
       var event = EKEvent(eventStore : store) 
       event.calendar = calendar 
       event.title = "New Meeting" 
       event.startDate = startDate 
       event.endDate = endDate 
       //Save event in Calendar 
       var error : NSError? 
       let result = store.saveEvent(event, span: .ThisEvent, commit: error) 
       if result == false{ 
        if let theError = error{ 
         print ("An error occured \(theError)") 
        } 
       } 
      } 

     } 

    } 

} 

Я искал ошибки, но не нашел подходящего решения.

+1

Существует множество ограничений при добавлении события самостоятельно (вы не можете редактировать участников и так), я бы рекомендовал использовать EventKitUI, который позволяет легко редактировать \ создавать \ удалять события. https://developer.apple.com/library/ios/documentation/EventKitUI/Reference/EventKitUIFrameworkRef/index.html –

ответ

1
func insertEvent(store : EKEventStore){ 
    let calendars = store.calendarsForEntityType(EKEntityType.Event) 
    for calendar in calendars{ 
     if calendar.title == "ioscreater"{ 
      let startDate = NSDate() 
      let endDate = startDate.dateByAddingTimeInterval(2*60*60) 
      //Create event 
      var event = EKEvent(eventStore : store) 
      event.calendar = calendar 
      event.title = "New Meeting" 
      event.startDate = startDate 
      event.endDate = endDate 
      //Save event in Calendar 
      do { 
       try store.saveEvent(event, span: .ThisEvent) 
      } catch { 
       // Do error stuff here 
      } 
     } 
0

Добавить saveEvent код в попытке, поймать, как показано ниже:

 do { 
     try store.saveEvent(event, span: .ThisEvent) 
       } catch let err as NSError{ 
        print ("An error occured \(err.description)") 
       } 
0

Это работает для меня в Swift 3.0

Во-первых, вам нужно добавить "Защита - Календари Использование Описание" в info.plist.

import EventKit

func addEventToCalendar(title: String, description: String?, startDate: Date, endDate: Date, completion: ((_ success: Bool, _ error: NSError?) -> Void)? = nil) { 

    let eventStore = EKEventStore() 

    eventStore.requestAccess(to: .event, completion: { (granted, error) in 
     if (granted) && (error == nil) { 
      let event = EKEvent(eventStore: eventStore) 
      event.title = title 
      event.startDate = startDate 
      event.endDate = endDate 
      event.notes = description 
      event.calendar = eventStore.defaultCalendarForNewEvents 
      do { 
       try eventStore.save(event, span: .thisEvent) 
      } catch let e as NSError { 
       completion?(false, e) 
       return 
      } 
      completion?(true, nil) 
     } else { 
      completion?(false, error as NSError?) 
     } 
    }) 
} 

Затем вы можете легко вызвать этот метод, как следующее:

addEventToCalendar(title: "Best friend birthday", description: "Remember you or miss you!", startDate: NSDate(), endDate: NSDate()) 

Спасибо и наслаждаться кодирования !!!

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