2014-11-13 10 views
5

Wie wird der Ort nicht nur NSString, sondern mit Breiten- und Längengrad hinzugefügt, so dass auch eine Karte im Kalender angezeigt wird?Lokation zu EKEvent IOS hinzufügen Kalender

<EKCalendarItem> 

https://developer.apple.com/LIBRARY/ios/documentation/EventKit/Reference/EKCalendarItemClassRef/index.html#//apple_ref/occ/instp/EKCalendarItem/location

@property(nonatomic, copy) NSString *location; 

Code:

EKEventStore *store = [[EKEventStore alloc] init]; 
[store requestAccessToEntityType:EKEntityTypeEvent completion:^(BOOL granted, NSError *error) { 
    if (!granted) { return; } 
    EKEvent *event = [EKEvent eventWithEventStore:store]; 
    event.title = @"Event Title"; 
    event.startDate = [NSDate date]; //today 
    event.endDate = [event.startDate dateByAddingTimeInterval:60*60]; //set 1 hour meeting 
    [email protected]"Note"; 
    [email protected]"Eiffel Tower,Paris"; //how do i add Lat & long/CLLocation? 
    event.URL=[NSURL URLWithString:shareUrl]; 
    [event setCalendar:[store defaultCalendarForNewEvents]]; 
    NSError *err = nil; 
    [store saveEvent:event span:EKSpanThisEvent commit:YES error:&err]; 
    NSString *savedEventId = event.eventIdentifier; //this is so you can access this event later 
}]; 

Example

+0

Versuchen Sie, was in den ans gegeben tun http://stackoverflow.com/questions/16647996/get-location- name-from-latitude-longitude-in-ios – Revinder

+0

Haben Sie schon eine Lösung gefunden? Ich bin auf dem gleichen Boot – jsetting32

+0

@ Jsetting32 Noch keine Lösung, ich denke, es ist nicht möglich vielleicht: P – Metalhead1247

Antwort

0

Sie könnten in der Lage sein setValue zu verwenden: forKey: auf dem EKEvent nach einem EKStructuredLocation erstellen, ist der Schlüssel 'structuredLocation'

5

Es ist ziemlich seltsam, dass es keine Dokumentation dafür gibt, aber so fügen Sie einem Kalenderereignis eine geoLocation hinzu.

EKStructuredLocation* structuredLocation = [EKStructuredLocation locationWithTitle:@"Location"]; // locationWithTitle has the same behavior as event.location 
CLLocation* location = [[CLLocation alloc] initWithLatitude:0.0 longitude:0.0]; 
structuredLocation.geoLocation = location; 

[event setValue:structuredLocation forKey:@"structuredLocation"]; 
+0

Ich zweifle nicht, dass dies funktioniert. In der Dokumentation wird jedoch die Verwendung von EKStructuredLocation speziell für die Einstellung von Geofencing-Standorten erwähnt. Irgendwelche Probleme, die mit dieser Lösung entstehen könnten? – SpacyRicochet

+1

@spacyRicochet - Ich hatte keine Probleme mit dieser Methode. Von dem, womit ich gespielt habe, ist dies die einzige Lösung für das Hinzufügen einer Karte zu Ihrem Kalenderereignis. Ich glaube wirklich, dass die Dokumentation aktualisiert werden muss. Entweder haben sie diese Funktionalität implementiert und es war ein Fehler, oder sie haben einfach vergessen, dies in ihre Dokumentation aufzunehmen. Egal, es funktioniert. –

+0

Scheint, für mich nicht richtig zu funktionieren, obwohl das Simulator nicht mögen könnte. Wird es später auf dem Gerät versuchen. – SpacyRicochet

7

Das Anwesen ist structuredLocation auf iOS 9 verfügbar, obwohl EKEvent Dokumentation es nicht erwähnen, aber structuredLocation nicht in EKEvent öffentlichen Header-Datei vorhanden ist, und Sie können es in Xcode überprüfen. Keine Notwendigkeit KVC zu verwenden, um es nach iOS einzustellen 9.

Swift-Version wie folgt:

let location = CLLocation(latitude: 25.0340, longitude: 121.5645) 
let structuredLocation = EKStructuredLocation(title: placeName) // same title with ekEvent.location 
structuredLocation.geoLocation = location 
ekEvent.structuredLocation = structuredLocation