ios - 使用 Swift 在 iOS8 中将事件添加到日历

标签 ios xcode swift events calendar

我是 swift 的新手,我正在从这个网站练习“添加日历事件”:http://www.ioscreator.com/tutorials/add-event-calendar-tutorial-ios8-swift ,但我在行中收到以下错误

 let result = store.saveEvent(event, span: .ThisEvent, commit: error)
  • 调用可以抛出,但是没有标上'try'错误不处理
  • 无法转换“NSError”类型的值?到预期的参数类型 '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)")
                    }
                }
            }

        }

    }

}

我用谷歌搜索了错误,但找不到合适的解决方案。

最佳答案

这适用于 Swift 3.0

首先,您需要在info.plist中添加“隐私-日历使用说明”。

导入 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())

感谢并享受编码!!!

关于ios - 使用 Swift 在 iOS8 中将事件添加到日历,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38091802/

相关文章:

xcode - 有没有办法强制机器人在 Xcode 持续集成中的 ui 测试下始终接受权限警报?

Swift - 如何创建这种形式的气泡效果

ios - 使用 Swift 扩展 UIKit 类会破坏 Interface Builder

ios - 从 UICollectionView 获取单元格的屏幕位置

xcode - 如何使 Xcode 项目源文件与文件系统目录保持同步?

iphone - 应用程序不会在 iPhone 模拟器上旋转

swift - 在 UIVIew 的左上角创建 UILabel 并直接向下设置动画?

ios - JASidePanels 修复右面板边界

ios - 我应该如何重构我的自定义 UITableView 以提高可维护性

ios - iOS 应用程序中的应用程序屏幕序列