Copyright (C) iPhoneアプリ開発備忘録 All rights reserved.
ブログ内で記したコード、内容の正確性は保証いたしません。
記載内容を実装したことにより発生した不具合・損害等の責任は一切負いません。



2014年08月22日

EKEventKitでリマインダーに登録する



EKEventKitを使ってリマインダーに登録する方法は、カレンダーに登録する場合と似ている。

カレンダーに情報を登録する
http://iphone-app-developer.seesaa.net/article/234955974.html

hogeViewController.h
#import

@interface hogeViewController

@property (nonatomic, retain) EKEventStore *eventStore;
@end


hogeViewController.m
-(void)reminderEdit:(id)anArgument{

// 初期化
_eventStore = [[EKEventStore alloc] init];

// リマインダーの編集
EKReminder *reminder = [EKReminder reminderWithEventStore:_eventStore];
reminder.title = @"Title";
reminder.calendar = [_eventStore defaultCalendarForNewReminders];

// 期限の編集
NSDateComponents *dateComponents = [[NSDateComponents alloc] init];
[dateComponents setYear:2014];
[dateComponents setMonth:10];
[dateComponents setDay:26];
[dateComponents setHour:10];
reminder.dueDateComponents = dateComponents;

// 期日による通知を登録
[reminder addAlarm:[EKAlarm alarmWithAbsoluteDate:[[NSCalendar currentCalendar] dateFromComponents:dateComponents]]];

// ジオフェンス座標の編集
CLLocationCoordinate2D spotCenter;
spotCenter.latitude = 12.34567];
spotCenter.longitude = 987.65432;

EKStructuredLocation *location = [EKStructuredLocation locationWithTitle:@"Address"];
location.geoLocation = [[CLLocation alloc] initWithLatitude:spotCenter.latitude longitude:spotCenter.longitude];
location.radius = 0; // 検知する範囲をシステム既定の半径にする

// ジオフェンスによる通知を登録
EKAlarm *alarm = [[EKAlarm alloc]init];
alarm.structuredLocation = location;
alarm.proximity = EKAlarmProximityEnter; // 領域に入ったときに通知(ジオフェンス)

[reminder addAlarm:alarm];

NSError *error = nil;

[_eventStore saveReminder:reminder commit:YES error:&error];

if (error) {
NSLog(@"Failed to set reminder: %@", error);
}
}


リマインダーにはタイトル、期日、ジオフェンス設定(指定した座標を中心とする指定された半径を出入りしたときに通知する)などが指定できる。
上記コードの場合、
reminder.calendar = [_eventStore defaultCalendarForNewReminders];
によりデフォルトのリストに登録される。
デフォルトのリストを変更するには、設定アプリ→リマインダー→デフォルトのリストから変更する。

reminder.title は必ず設定しなければならない。設定しなくてもリマインダーに登録はできるが、リマインダーアプリを起動したときに、テーブルセルの右側にaccessoryTypeが表示されないため登録したToDoが編集できない(削除はできる)。

リマインダー登録前に、EKAuthorizationStatusでEKEntityTypeReminderが使用できる状態になっているか確認すること。使用できる場合のみ、リマインダー登録し、それ以外はアラート画面を表示してユーザーにアプリからリマインダーへのアクセスを設定アプリから許可するように促すのが望ましい。


参考記事:
https://developer.apple.com/jp/devcenter/ios/library/documentation/EventKitProgGuide.pdf
http://qiita.com/takayama/items/0fbf8d367844a6f2c944
http://stackoverflow.com/questions/15616371/ios-location-based-reminder
http://www.techotopia.com/index.php/Using_iOS_6_Event_Kit_to_Create_Date_and_Location_Based_Reminders

タグ:iPhone iPAD apple Mac IOS
【Eventkitの最新記事】
posted by mobileDeveloper at 22:13 | Comment(0) | TrackBack(0) | Eventkit はてなブックマーク - EKEventKitでリマインダーに登録する | このブログの読者になる | 更新情報をチェックする
この記事へのコメント
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント:

認証コード: [必須入力]


※画像の中の文字を半角で入力してください。
※ブログオーナーが承認したコメントのみ表示されます。

この記事へのトラックバック
Apple、Appleのロゴ、App Store、iPodのロゴ、iTunesは、米国および他国のApple Inc.の登録商標です。
iPhone、iPod touch、iPadはApple Inc.の商標です。
iPhone商標は、アイホン株式会社のライセンスに基づき使用されています。
その他、本ブログに記載されている製品名、会社名は、それぞれ各社の商標または登録商標です。