2015-07-05 91 views
1

我想在我的swift應用程序中設置一個簡單的EKReminder,以提醒用戶趕上公交車。但是,當我嘗試保存我的提醒時,我總是收到一個錯誤消息(沒有錯誤報告,應用程序崩潰)。我有下面的代碼。在iOS中設置提醒Swift

public class func createReminder(reminderTitle: String, timeInterval:  NSDate) { 
    var calendarDatabase = EKEventStore() 

    calendarDatabase.requestAccessToEntityType(EKEntityTypeReminder, 
     completion: nil) 

    let reminder = EKReminder(eventStore: calendarDatabase) 

    reminder.title = reminderTitle 

    let alarm = EKAlarm(absoluteDate: timeInterval) 

    reminder.addAlarm(alarm) 

    reminder.calendar = calendarDatabase.defaultCalendarForNewReminders() 

    var error: NSError? 

    calendarDatabase.saveReminder(reminder, commit: true, error: &error) 
} 

回答

-1

嘗試以下操作:

EKEntityTypeReminder -> EKEntityType.Reminder 
0

我沒有使用過這樣的事情之前,但看着你的代碼,我可以看到你所說的requestAccessToEntity - 方法,不處理響應。該方法很可能會向用戶顯示提示,要求他們接受您的應用可以訪問「提醒」。使用您的代碼,您需要獲得許可,但是您的代碼的其餘部分將在詢問後立即執行,而不會「等待」響應。這段代碼第一次運行時,用戶會被問到,並且您的提醒將被拒絕,因爲它會立即嘗試保存。 即使您的用戶點擊「允許」,您的代碼已經在未經許可的情況下運行。

現在,如果用戶點擊允許一次,然後再次嘗試做同樣的事情,那麼也許它會工作,我不知道。但是,如果您的用戶在提示中單擊了「取消」,那麼您的代碼將永遠不會運行,直到他們進入設置並允許您的應用顯示提醒。

在知道用戶是否允許之前,您不應該創建提醒,因此您應該將此功能真正分成兩個獨立的功能。並且在該功能中不要通過nil代替completion;處理響應。