如何在iPhone日历上创建提醒和存储提醒

时间:2016-04-27 11:00:19

标签: ios objective-c datetime alarm reminders

我是编程新手我已经制作了一个Reminder App,它将事件保存在iCal上,现在我想通过项目中的编码删除那些事件,我在iCal中创建事件的代码如下:

-(void) setReminderInPhone {
NSString *dateWithTime = [NSString stringWithFormat:@"%@ %@",calenderDtl.dateInString,calenderDtl.openTimeUTC];
NSString *mrktName = mrktDtl.marketName;
//dateWithTime = @"2016-04-02 04:10 am";

NSDateFormatter *fmt = [[NSDateFormatter alloc] init];
fmt.dateFormat = @"yyyy-MM-dd hh:mm a";
[fmt setAMSymbol:@"am"];
[fmt setPMSymbol:@"pm"];
fmt.timeZone = [NSTimeZone timeZoneWithName:@"UTC"];
NSDate *utc = [fmt dateFromString:dateWithTime];

fmt.dateFormat = @"yyyy-MM-dd hh:mm a";
fmt.timeZone = [NSTimeZone systemTimeZone];
NSString *local = [fmt stringFromDate:utc];
NSDate *localDate = [fmt dateFromString:local];
EKEventStore *store = [EKEventStore new];
[store requestAccessToEntityType:EKEntityTypeEvent completion:^(BOOL granted, NSError *error) {
    if (!granted) { return; }
    EKEvent *event = [EKEvent eventWithEventStore:store];
    event.title = mrktName;
    event.startDate = localDate; //test
    event.endDate = [event.startDate dateByAddingTimeInterval:60*2];
    event.calendar = [store defaultCalendarForNewEvents];
    NSError *err = nil;
    [store saveEvent:event span:EKSpanThisEvent commit:YES error:&err];
}];
}

2 个答案:

答案 0 :(得分:2)

请尝试按以从日历中删除事件。

EKEvent *eventToRemove = [eventStore eventWithIdentifier:eventIdentifier];

if (eventToRemove)
{
    NSError* error = nil;

    [eventStore removeEvent:eventToRemove span:EKSpanThisEvent commit:YES error:&error];
}

您将在iCalendar中创建事件时获取eventIdentifier的值,如下所示:

//Adding Events to default iOS calendar for Making Reminders
-(NSString *)addEventToCalendar: (NSString *)title withDate:(NSString *)date{

EKEvent *event = [EKEvent eventWithEventStore:eventStore];

event.title = [NSString stringWithFormat:@"Pregnancy Workout Advisor - Event: %@",title];

event.startDate = [dateFormatter dateFromString:date];

event.endDate = [event.startDate dateByAddingTimeInterval:60*60];  //set 1 hour meeting

event.allDay = YES;

[dateFormatter setDateFormat:@"YYYY-MM-dd"];

EKAlarm *alarm = [EKAlarm alarmWithAbsoluteDate:[NSDate dateWithTimeInterval:9*60*60 sinceDate:[dateFormatter dateFromString:date]]];

[event addAlarm:alarm];

event.calendar = [eventStore defaultCalendarForNewEvents];

NSError *err = nil;

[eventStore saveEvent:event span:EKSpanThisEvent commit:YES error:&err];

return event.eventIdentifier;  }

在上面的方法中,您将获得要添加到日历的每个事件的eventIdentifier。将eventIdentifier存储到CoreData / Sqlite,无论是什么..

因此,当您需要删除该事件时,只需提供该eventIdentifier即可。这肯定会从日历中删除。

希望它有所帮助...

答案 1 :(得分:0)

试试这段代码,它为我工作,

EKEventStore *store = [[EKEventStore alloc] init];

            [store requestAccessToEntityType:EKEntityTypeEvent completion:^(BOOL granted, NSError *error) {
                if (!granted) return;
                EKEvent* eventToRemove = [store eventWithIdentifier:[eventIdendifier objectAtIndex:indexPath.row]];
                if (eventToRemove) {
                    [eventToRemove setCalendar:[store defaultCalendarForNewEvents]];

                    NSError* err = nil;

                    [store removeEvent:eventToRemove span:EKSpanThisEvent commit:YES error:&err];

                    dispatch_async(dispatch_get_main_queue(), ^{

                        [eventIdendifier removeObjectAtIndex:indexPath.row];

                    });
                }
            }];

我已经给出了eventIdentifier值,它的NSMutableArray值。首先在事件存储中添加事件,每个事件都获得每个事件标识符值,它自动保存到eventIdentifier并获取标识符值方法如下,

EKEventStore *store = [EKEventStore new];

    if ([store respondsToSelector:@selector(requestAccessToEntityType:completion:)])
    {
        /* iOS Settings > Privacy > Calendars > MY APP > ENABLE | DISABLE */
        [store requestAccessToEntityType:EKEntityTypeEvent completion:^(BOOL granted, NSError *error)
         {
             if ( granted )
             {
                 NSPredicate *predicate = [store predicateForEventsWithStartDate:date1 endDate:[date1 dateByAddingTimeInterval:23.96 * 60.0 * 60.0] calendars:nil];
                 NSMutableArray *eventsVal = (NSMutableArray *)[store eventsMatchingPredicate:predicate];

                 for (int i = 0; i<eventsVal.count; i++) {
                     [eventIdendifier addObject:[[eventsVal objectAtIndex:i] eventIdentifier]];
                 }

             }
         }];

    }

其谓词结束日期检查的开始日期然后获取所有事件特定日期,并且如果值帮助显示事件值,删除事件等,还从eventIdentifier值添加对象

希望它有用