web-dev-qa-db-ja.com

xcodeiOSのカレンダーにイベントを追加する

ハイ

カレンダーにイベントを追加するためのこのコードがありますが、追加されません。

-(void)event
{
    EKEventStore *eventStore = [[EKEventStore alloc] init];

    EKEvent *event  = [EKEvent eventWithEventStore:eventStore];
    event.title     = @"Event";


    NSDateFormatter *tempFormatter = [[NSDateFormatter alloc]init];
    [tempFormatter setDateFormat:@"dd.MM.yyyy HH:mm"];


    NSString *dateandtime =[NSString stringWithFormat:@"%@%@%@",datestring,@" ",starttimestring];
    NSString *dateandtimeend =[NSString stringWithFormat:@"%@%@%@",datestring,@" ",endtimestring];



    event.startDate = [tempFormatter dateFromString:dateandtime];
    event.endDate = [tempFormatter dateFromString:dateandtimeend];


    [event addAlarm:[EKAlarm alarmWithRelativeOffset:60.0f * -60.0f * 24]];
    [event addAlarm:[EKAlarm alarmWithRelativeOffset:60.0f * -15.0f]];

    [event setCalendar:[eventStore defaultCalendarForNewEvents]];
    NSError *err;
    [eventStore saveEvent:event span:EKSpanThisEvent error:&err];
}

XMLから、次の形式で日付と時刻を取得します。

日付文字列:2012年10月28日

starttimestring:15:00

14
WildWorld

IOS 6シミュレーターを使用していますか、それともiOS 6を搭載したデバイスを使用していますか?その場合、アイテムをイベントストアに保存する前に、イベントストアを使用する許可をユーザーに求める必要があります。

基本的に、requestAccessToEntityType:completion:セレクターがイベントストアオブジェクトで使用できる場合は、そのメソッドを呼び出して、ユーザーがアクセス許可を付与したときに実行されるコードブロックを提供し、そのブロックでイベントを保存します。

まず、EventKitフレームワークをプロジェクトに追加し、インポートを含めることを忘れないでください。

#import <EventKit/EventKit.h>

これが私が使用したコードスニペットで、私のために機能しました。

EKEventStore *eventStore = [[EKEventStore alloc] init];
if ([eventStore respondsToSelector:@selector(requestAccessToEntityType:completion:)])
{
    // the selector is available, so we must be on iOS 6 or newer
    [eventStore requestAccessToEntityType:EKEntityTypeEvent completion:^(BOOL granted, NSError *error) {
        dispatch_async(dispatch_get_main_queue(), ^{
            if (error)
            {
                // display error message here
            }
            else if (!granted)
            {
                // display access denied error message here
            }
            else
            {
                // access granted
                // ***** do the important stuff here *****
            }
        });
    }];
}
else
{
    // this code runs in iOS 4 or iOS 5
    // ***** do the important stuff here *****
}

[eventStore release];

これは私がこのテーマに関して行ったブログ投稿です:

http://www.dosomethinghere.com/2012/10/08/ios-6-calendar-and-address-book-issues/

24
BP.

1)追加Eventkitフレームワークと#import <EventKit/EventKit.h>

2)

 -(void)syncWithCalendar {
    EKEventStore *store = [EKEventStore new];
    [store requestAccessToEntityType:EKEntityTypeEvent completion:^(BOOL granted, NSError *error) {
        if (!granted) { return; }
        EKEvent *event = [EKEvent eventWithEventStore:store];
        event.title = @"Event Title Testing"; //give event title you want
        event.startDate = [NSDate date];
        event.endDate = [event.startDate dateByAddingTimeInterval:60*60];
        event.calendar = [store defaultCalendarForNewEvents];
        NSError *err = nil;
        [store saveEvent:event span:EKSpanThisEvent commit:YES error:&err];
    }];
}

3)関数を呼び出す

[self syncWithCalendar];
2
Hardik Thakkar