iOS 10及更高版本中的EKEventStore requestAccessToEntityType崩溃应用程序

时间:2016-10-07 13:07:33

标签: ios swift calendar ekevent ekeventstore

我有应用程序,我必须在默认日历中添加事件,直到iOS 10正常。现在在iOS 10中它不授予访问权限。我已将use legacy swift language version设置为yes。我的代码是

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

调试我的应用程序时在Xcode 8中的eventStore.requestAccessToEntityType崩溃。

Screenshot of debug

我的应用程序已上线,我需要解决它。任何帮助都是适当的。提前谢谢。

2 个答案:

答案 0 :(得分:7)

在iOS 10版本中,您需要为Info.plist上的权限警报设置描述消息

  

重要提示:iOS 10.0上或之后链接的iOS应用必须包含在其中   Info.plist文件用于数据类型的用法描述键   需要访问或它将崩溃。访问提醒和日历   具体来说,它必须包含NSRemindersUsageDescription和   NSCalendarsUsageDescription,分别为。

来自Apple Docs

答案 1 :(得分:1)

    let eventStore = EKEventStore()
switch EKEventStore.authorizationStatus(for: .event) {
case .authorized: break
//access
case .denied:
    print("Access denied")
case .notDetermined:
    eventStore.requestAccess(to: .event, completion:
        {[weak self] (granted: Bool, error: Error?) -> Void in
            if granted {
                //access
            } else {
                print("Access denied")
            }
        })
default:
    print("Case Default")
}

使用XCode 8和swift 3,这是新格式。您是否在iOS 10上测试了应用程序。