커스텀 앱에서 iCal 이벤트를 iPhone 캘린더에 추가하는 방법이 있습니까?
답변
를 기반으로 애플 문서 , 이것은 아이폰 OS 6.0로 약간 변경되었습니다.
1) “requestAccessToEntityType : completion :”을 통해 사용자 캘린더에 대한 액세스를 요청하고 블록 내에서 이벤트 처리를 실행해야합니다.
2) 지금 이벤트를 커밋하거나 “커밋”매개 변수를 저장 / 제거 호출에 전달해야합니다.
다른 모든 것은 그대로 유지됩니다 …
EventKit 프레임 워크 및 #import <EventKit/EventKit.h>
코드를 추가하십시오 .
내 예제에는 NSString * savedEventId 인스턴스 속성이 있습니다.
이벤트를 추가하려면
EKEventStore *store = [EKEventStore new];
[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
event.calendar = [store defaultCalendarForNewEvents];
NSError *err = nil;
[store saveEvent:event span:EKSpanThisEvent commit:YES error:&err];
self.savedEventId = event.eventIdentifier; //save the event id if you want to access this later
}];
이벤트를 제거하십시오.
EKEventStore* store = [EKEventStore new];
[store requestAccessToEntityType:EKEntityTypeEvent completion:^(BOOL granted, NSError *error) {
if (!granted) { return; }
EKEvent* eventToRemove = [store eventWithIdentifier:self.savedEventId];
if (eventToRemove) {
NSError* error = nil;
[store removeEvent:eventToRemove span:EKSpanThisEvent commit:YES error:&error];
}
}];
일정이 여러 개인 경우 기본 캘린더에 일정이 추가됩니다.
스위프트 버전
EventKit 프레임 워크를 가져와야합니다.
import EventKit
이벤트 추가
let store = EKEventStore()
store.requestAccessToEntityType(.Event) {(granted, error) in
if !granted { return }
var event = EKEvent(eventStore: store)
event.title = "Event Title"
event.startDate = NSDate() //today
event.endDate = event.startDate.dateByAddingTimeInterval(60*60) //1 hour long meeting
event.calendar = store.defaultCalendarForNewEvents
do {
try store.saveEvent(event, span: .ThisEvent, commit: true)
self.savedEventId = event.eventIdentifier //save event id to access this particular event later
} catch {
// Display error to user
}
}
이벤트 제거
let store = EKEventStore()
store.requestAccessToEntityType(EKEntityTypeEvent) {(granted, error) in
if !granted { return }
let eventToRemove = store.eventWithIdentifier(self.savedEventId)
if eventToRemove != nil {
do {
try store.removeEvent(eventToRemove, span: .ThisEvent, commit: true)
} catch {
// Display error to user
}
}
}
답변
OS 4.0에서 이벤트 키트 프레임 워크를 사용하여이를 수행 할 수 있습니다.
창의 왼쪽에있는 그룹 및 파일 네비게이터에서 FrameWorks 그룹을 마우스 오른쪽 단추로 클릭하십시오. ‘추가’, ‘기존 프레임 워크’, ‘이벤트 킷 프레임 워크’를 차례로 선택하십시오.
그런 다음 다음과 같은 코드로 이벤트를 추가 할 수 있어야합니다.
#import "EventTestViewController.h"
#import <EventKit/EventKit.h>
@implementation EventTestViewController
- (void)viewDidLoad {
[super viewDidLoad];
EKEventStore *eventStore = [[EKEventStore alloc] init];
EKEvent *event = [EKEvent eventWithEventStore:eventStore];
event.title = @"EVENT TITLE";
event.startDate = [[NSDate alloc] init];
event.endDate = [[NSDate alloc] initWithTimeInterval:600 sinceDate:event.startDate];
[event setCalendar:[eventStore defaultCalendarForNewEvents]];
NSError *err;
[eventStore saveEvent:event span:EKSpanThisEvent error:&err];
}
@end
답변
예, 여전히이 API (2.1)가 없습니다. 그러나 WWDC에서는 많은 사람들이 이미 기능에 관심을 보였으며 (자신 포함) 아래 사이트로 이동하여 기능 요청을 작성하는 것이 좋습니다. 관심이 충분하면 ICal.framework를 공개 SDK로 옮길 수 있습니다.
답변
iPhone OS 4.0에 캘린더 액세스가 추가되고 있습니다 :
캘린더 액세스
앱은 이제 이벤트 키트를 사용하여 캘린더 앱에서 직접 이벤트를 만들고 편집 할 수 있습니다.
되풀이 이벤트를 생성하고 시작 및 종료 시간을 설정 한 후 장치의 캘린더에 할당합니다.
답변
Tristan 개요와 같은 이벤트 API를 사용하여 이벤트를 추가 할 수 있으며 iOS 캘린더에 표시되는 Google 캘린더 이벤트를 추가 할 수도 있습니다.
사용하는 구글의 API 목표 – C 클라이언트
- (void)addAnEvent {
// Make a new event, and show it to the user to edit
GTLCalendarEvent *newEvent = [GTLCalendarEvent object];
newEvent.summary = @"Sample Added Event";
newEvent.descriptionProperty = @"Description of sample added event";
// We'll set the start time to now, and the end time to an hour from now,
// with a reminder 10 minutes before
NSDate *anHourFromNow = [NSDate dateWithTimeIntervalSinceNow:60*60];
GTLDateTime *startDateTime = [GTLDateTime dateTimeWithDate:[NSDate date]
timeZone:[NSTimeZone systemTimeZone]];
GTLDateTime *endDateTime = [GTLDateTime dateTimeWithDate:anHourFromNow
timeZone:[NSTimeZone systemTimeZone]];
newEvent.start = [GTLCalendarEventDateTime object];
newEvent.start.dateTime = startDateTime;
newEvent.end = [GTLCalendarEventDateTime object];
newEvent.end.dateTime = endDateTime;
GTLCalendarEventReminder *reminder = [GTLCalendarEventReminder object];
reminder.minutes = [NSNumber numberWithInteger:10];
reminder.method = @"email";
newEvent.reminders = [GTLCalendarEventReminders object];
newEvent.reminders.overrides = [NSArray arrayWithObject:reminder];
newEvent.reminders.useDefault = [NSNumber numberWithBool:NO];
// Display the event edit dialog
EditEventWindowController *controller = [[[EditEventWindowController alloc] init] autorelease];
[controller runModalForWindow:[self window]
event:newEvent
completionHandler:^(NSInteger returnCode, GTLCalendarEvent *event) {
// Callback
if (returnCode == NSOKButton) {
[self addEvent:event];
}
}];
}
답변
스위프트 4.0 구현 :
페이지 상단에 가져 오기 사용 import EventKit
그때
@IBAction func addtoCalendarClicked(sender: AnyObject) {
let eventStore = EKEventStore()
eventStore.requestAccess( to: EKEntityType.event, completion:{(granted, error) in
if (granted) && (error == nil) {
print("granted \(granted)")
print("error \(error)")
let event = EKEvent(eventStore: eventStore)
event.title = "Event Title"
event.startDate = Date()
event.endDate = Date()
event.notes = "Event Details Here"
event.calendar = eventStore.defaultCalendarForNewEvents
var event_id = ""
do {
try eventStore.save(event, span: .thisEvent)
event_id = event.eventIdentifier
}
catch let error as NSError {
print("json error: \(error.localizedDescription)")
}
if(event_id != ""){
print("event added !")
}
}
})
}
답변
Dashrath 답변에 대한 신속한 4 업데이트
import UIKit
import EventKit
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
let eventStore = EKEventStore()
eventStore.requestAccess( to: EKEntityType.event, completion:{(granted, error) in
if (granted) && (error == nil) {
let event = EKEvent(eventStore: eventStore)
event.title = "My Event"
event.startDate = Date(timeIntervalSinceNow: TimeInterval())
event.endDate = Date(timeIntervalSinceNow: TimeInterval())
event.notes = "Yeah!!!"
event.calendar = eventStore.defaultCalendarForNewEvents
var event_id = ""
do{
try eventStore.save(event, span: .thisEvent)
event_id = event.eventIdentifier
}
catch let error as NSError {
print("json error: \(error.localizedDescription)")
}
if(event_id != ""){
print("event added !")
}
}
})
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
}