2016-04-27 79 views
0

我是編程新手我已經提出了一個提醒應用程序,它將事件保存在iCal中,現在我想通過項目中的代碼刪除該事件,我的代碼用於創建iCal中的事件如下 -如何在iPhone日曆上創建提醒和商店提醒

-(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

請嘗試以下操作以從日曆中刪除事件。

EKEvent *eventToRemove = [eventStore eventWithIdentifier:eventIdentifier]; 

if (eventToRemove) 
{ 
    NSError* error = nil; 

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

你會得到eventIdentifier的價值在創建的iCalendar事件的時間如下:

//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即可。這肯定會從日曆中刪除。

希望它可以幫助...

+0

可以請你解釋我它是什麼工作。 – Avantika

+0

首先,我們從eventStore獲取事件條目。如果當天有事件發生,那麼我們繼續移除事件。 –

+0

我這樣做,但無法刪除EKEventStore * store = [EKEventStore new]; [store requestAccessToEntityType:EKEntityTypeEvent completion:^(BOOL granted,NSError error){if(!granted){return;} EKEvent eventToRemove = [store eventWithIdentifier:savedEventId]; if(eventToRemove){NSError * error = nil; [store removeEvent:eventToRemove span:EKSpanThisEvent commit:YES error:&error]; }}];沒有錯誤,但它不允許簡單地返回。 – Avantika

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增值對象,如果值幫助顯示事件值,刪除事件等

希望它有幫助

+0

使用它,但它是拋出錯誤使用未聲明的標識符'eventIdendifier'如何刪除此 – Avantika

+0

在您的建議之前,我正在嘗試以下代碼EKEventStore * store = [EKEventStore new]; [store requestAccessToEntityType:EKEntityTypeEvent completion:^(BOOL granted,NSError * error){ if(!授予){return;} EKEvent * eventToRemove = [store eventWithIdentifier:savedEventId];如果(eventToRemove){ NSError * error = nil; [store removeEvent:eventToRemove span:EKSpanThisEvent commit:YES error:&error]; } }];有沒有錯誤,但它沒有授予權限只是簡單地返回 – Avantika

+0

對不起,eventIdentifier是NSMutableArray,當你添加事件你已經從eventStore獲得事件標識符值,保存事件標識符值然後刪除標識符值,它的最好的移除該事件。試試吧 –