29355


現在、swift2 で iOS用のカレンダーアプリを制作しています。

[code]

    let eventStore = EKEventStore()
    var calendar: EKCalendar!
    var events: [EKEvent]?
    
    func loadEvents()
    {
        // Create a date formatter instance to use for converting a string to a date
        let dateFormatter = NSDateFormatter()
        dateFormatter.dateFormat = "yyyy-MM-dd"
    
        // Create start and end date NSDate instances to build a predicate for which events to select
        let startDate = dateFormatter.dateFromString("2016-01-01")
        let endDate = dateFormatter.dateFromString("2016-12-31")
    
        if let startDate = startDate, endDate = endDate {
            let eventStore = EKEventStore()
    
            // Use an event store instance to create and properly configure an NSPredicate
            let eventsPredicate = eventStore.predicateForEventsWithStartDate(startDate, endDate: endDate, calendars: nil)
    
            // Use the configured NSPredicate to find and return events in the store that match
            self.events = eventStore.eventsMatchingPredicate(eventsPredicate).sort(){
                (e1: EKEvent, e2: EKEvent) -> Bool in
                return e1.startDate.compare(e2.startDate) == NSComparisonResult.OrderedAscending
            }
        }
    
    }
    
[/code]

このようなコードでイベントの一覧を取得することができましたが、  
イベントごとの固有のidentifierを取得することができません。

[code]

        // イベントが見つかった.
        if !events!.isEmpty {
            for i in events!{
    
    
                    print(i.title)
                    print(i.startDate)
                    print(i.eventIdentifier)
    
    
            }
        }
    
[/code]

このようなコードで、titleやstartDateはprintできまたのですが、  
いろいろ試してみましたが、eventIdentifierはprintすることができませんでした。

この後、eventIdentifierを利用してイベントの管理（情報の取得や編集）をしたいのですが、  
完全に行き詰まってしましました。

解決方法を教えていただけないでしょうか。  
どうか、よろしくお願いします。


CC BY-SA 3.0
2016-10-02T08:22:39.477
29301
2016-10-04T20:03:56.757
18978
question
swift ios xcode
EventKitで、eventIdentifier を取得したい。


そのような目的には、`calendarItemExternalIdentifier`というプロパティ(`EKEvent`の親クラスである`EKCalendarItem`のプロパティです)が使えるのではないかという話をAppleのDeveloper
Forumsで見かけたことがあります。

[How to remove an existing Event from Apple
Calendar](https://forums.developer.apple.com/message/114479#114479)

[calendarItemExternalIdentifier](https://developer.apple.com/reference/eventkit/ekcalendaritem/1507283-calendaritemexternalidentifier)

> ## Declaration
[code]

>     var calendarItemExternalIdentifier: String { get }
>  
[/code]

>
> ## Discussion
>
> This identifier allows you to access the same event or reminder across  
>  multiple devices.
>
> (以下略)
>
> この識別子は、あなたが複数のデバイス間で同一のイベントやreminderにアクセスすることができるようにします。

一度試してみてはいかがでしょうか。


CC BY-SA 3.0
2016-10-02T09:45:31.860
29303
2016-10-02T09:45:31.860
13972
29301
answer


let eventStore = EKEventStore()を複数宣言しているのが原因でした。  
へんな設定をしていたので、へんな動作をしていたようです。  
idだけが取得できないのは、なにかの保護がはたらいていたのでしょうか？ よくわかりません。  
ちゃんとした理由はなにひとつわかっていませんが、いちおう自己解決しました。


CC BY-SA 3.0
2016-10-04T20:03:56.757
29355
2016-10-04T20:03:56.757
18978
29301
answer