Search code examples
ekeventstore

cannot convert type to expected argument type


let eventStore = EKEventStore()


// 2
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")
}

I am getting error: cannot convert value of type '(bool,nserror!) -->void' to expected argument type 'ekeventstorerequestaccescompletionhandler'

at this line:

eventStore.requestAccessToEntityType(EKEntityType.Event, completion:
        {[weak self] (granted: Bool, error: NSError!) -> Void in

Solution

  • Try to remove [weak self], in my case this one works:

    eventStore.requestAccessToEntityType(EKEntityType.Event, completion: {
            (accessGranted: Bool, error: NSError?) in
    
            if accessGranted && (error == nil) {
                dispatch_async(dispatch_get_main_queue(), { completion(true) })
            } else {
                dispatch_async(dispatch_get_main_queue(), { completion(false) })
            }
        })