2017-08-14 9 views
0

イベントがカレンダーに既に存在するかどうかを確認し、存在することを警告します。これは私のコードですイベントがカレンダーに存在するかどうかを確認する - スウィフト

編集:それは重複イベントを追加し続けます。

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

ありがとうございます。それは働いている。他の方法では、開始日と終了日と一致しないために愚かなことをしましたか? –

関連する問題