2017-08-14 39 views
0

我試圖檢查日曆中是否存在事件,並顯示它存在的警報。這是我的代碼檢查日曆中是否存在事件 - Swift

編輯:它不斷添加重複事件。

let event = EKEvent(eventStore: eventStore) 
var savedEventId : String = "" 
event.title = title 
event.startDate = (self.dataEvent?.dates?.begin)! 
event.endDate = (self.dataEvent?.dates?.end)! 
event.calendar = eventStore.defaultCalendarForNewEvents 
let predicate = eventStore.predicateForEventsWithStartDate(startDate, endDate: endDate, calendars: nil) 
let existingEvents = eventStore.eventsMatchingPredicate(predicate) 
for singleEvent in existingEvents { 
    if singleEvent.title == self.dataEvent?.titleString && singleEvent.startDate == startDate && singleEvent.endDate == endDate { 
     let alert = UIAlertController(title: "Event Already Exists", message: "Event Already Exists in Calendar", preferredStyle: UIAlertControllerStyle.Alert) 
     alert.addAction(UIAlertAction(title: "Close", style: UIAlertActionStyle.Default, handler: nil)) 
     self.presentViewController(alert, animated: true, completion: nil) 
    } 
} 
do { 
    try eventStore.saveEvent(event, span: .ThisEvent) 
    savedEventId = event.eventIdentifier 
    print("Event Added") 
    let alert = UIAlertController(title: "Event Successfully Added", message: "Event Added to Calendar", preferredStyle: UIAlertControllerStyle.Alert) 
    alert.addAction(UIAlertAction(title: "Close", style: UIAlertActionStyle.Default, handler: nil)) 
    self.presentViewController(alert, animated: true, completion: nil) 
} catch { 
    print("Error occurred") 
} 
+1

會發生什麼?你有錯誤,或者根本沒有數據?它工作正常嗎?描述你所看到的內容以及它與你的期望有什麼不同,這很重要 - 這通常使我們更容易提供幫助 - 我們無法分辨你在這裏提出的問題。 – Petesh

+0

它只是不斷添加重複的事件到日曆。 –

回答

0

問題是,即使事件存在,您添加事件的do-catch塊也會始終被調用。您需要創建一個布爾值來跟蹤是否找到相同的事件,並且只有在未找到該塊時才執行do-catch塊。

只要找到第一個匹配事件,您也可以打開循環。

var eventAlreadyExists = false 
let event = EKEvent(eventStore: eventStore) 
var savedEventId : String = "" 
event.title = title 
event.startDate = (self.dataEvent?.dates?.begin)! 
event.endDate = (self.dataEvent?.dates?.end)! 
event.calendar = eventStore.defaultCalendarForNewEvents 
let predicate = eventStore.predicateForEventsWithStartDate(startDate, endDate: endDate, calendars: nil) 
let existingEvents = eventStore.eventsMatchingPredicate(predicate) 
for singleEvent in existingEvents { 
    if singleEvent.title == self.dataEvent?.titleString && singleEvent.startDate == startDate && singleEvent.endDate == endDate { 
     eventAlreadyExists = true 
     let alert = UIAlertController(title: "Event Already Exists", message: "Event Already Exists in Calendar", preferredStyle: UIAlertControllerStyle.Alert) 
     alert.addAction(UIAlertAction(title: "Close", style: UIAlertActionStyle.Default, handler: nil)) 
     self.presentViewController(alert, animated: true, completion: nil) 
     break 
    } 
} 
if !eventAlreadyExists { 
    do { 
     try eventStore.saveEvent(event, span: .ThisEvent) 
     savedEventId = event.eventIdentifier 
     print("Event Added") 
     let alert = UIAlertController(title: "Event Successfully Added", message: "Event Added to Calendar", preferredStyle: UIAlertControllerStyle.Alert) 
     alert.addAction(UIAlertAction(title: "Close", style: UIAlertActionStyle.Default, handler: nil)) 
     self.presentViewController(alert, animated: true, completion: nil) 
    } catch { 
     print("Error occurred") 
    } 
} 
+0

它仍然添加重複的事件。 –

+0

你是否檢查if語句是否被執行? –

+1

謝謝。它正在工作。在其他方法中做了一件愚蠢的事情,因爲它與開始和結束日期不匹配。 –