2016-04-27 22 views
0

Ich bin neu in der Programmierung Ich habe eine Erinnerung App gemacht, die Ereignisse auf iCal speichert und jetzt möchte ich diese Ereignisse durch die Codierung im Projekt, meinen Code zum Erstellen löschen Ereignisse in iCal ist unterSo erstellen Sie eine Erinnerung und speichern Erinnerung auf dem iPhone Kalender

-(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]; 
}]; 
} 

Antwort

2

Versuchen Sie, das Ereignis aus dem Kalender zu entfernen.

EKEvent *eventToRemove = [eventStore eventWithIdentifier:eventIdentifier]; 

if (eventToRemove) 
{ 
    NSError* error = nil; 

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

Sie den Wert von Eventidentifier zum Zeitpunkt der Erstellung Veranstaltung in iCalendar erhalten, wie folgend:

//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; } 

In diesem vorstehenden Verfahren erhalten Sie einen Eventidentifier für jedes Ereignis erhalten, die Sie hinzufügen zum Kalender. Speichern Sie den eventIdentifier zu CoreData/Sqlite, was auch immer ..

Also, wenn Sie dieses Ereignis löschen müssen, geben Sie einfach diese EventIdentifier. Dies wird sicherlich aus dem Kalender gelöscht werden.

Hoffe, es hilft ...

+0

können Sie mir bitte erklären, was es funktioniert. – Avantika

+0

Zuerst erhalten wir Event-Eintrag von EventStore. Wenn Sie an diesem Tag ein Ereignis haben, fahren wir mit removeEvent fort. –

+0

Ich mache das, kann aber EKEventStore nicht entfernen * store = [EKEventStore new]; [store requestAccessToEntityType: EKEntityTypeEvent-Vervollständigung:^(BOOL erteilt, NSError-Fehler) {if (! gewährt) {return;} EKEvent eventToRemove = [speicher eventWithIdentifier: savedEventId]; if (eventToRemove) {NSError * Fehler = Null; [Speicher removeEvent: eventToRemove span: EKSpanThisEvent commit: JA Fehler: & Fehler]; }}]; Es gibt keinen Fehler, aber es gibt keine Erlaubnis einfach zurückzukehren. – Avantika

0

diesen Code versuchen, seine Arbeits für mich,

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]; 

        }); 
       } 
      }]; 

i geben haben Eventidentifier Wert, dessen NSMutableArray Wert. zuerst hinzufügen Sie das Ereignis in der Ereignis Shop Sie jedes Ereignis, jedes Ereignis Kennungswert bekommen hatte, seine automatisch Eventidentifier speichern und die Kennung Wertmethode erhalten unten ist,

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]]; 
       } 

      } 
     }]; 

    } 

sein Prädikat das Startdatum Datum Prüfung beenden dann bekam insbesondere Datum und fügen Sie auch Objekt von Eventidentifier Wert alle Ereignisse, wenn der Wert Hilfe Ereignis Werte zu zeigen, entfernen Ereignisse usw.

hoffen, seine hilfreich

+0

verwendet es, aber es wirft Fehler Verwendung von nicht deklarierten Bezeichner 'eventIdendifier', wie diese – Avantika

+0

vor Ihrem Vorschlag zu entfernen Ich habe den folgenden Code versucht EKEventStore * store = [EKEventStore new]; [store requestAccessToEntityType: EKEntityTypeEvent Vervollständigung:^(BOOL erteilt, NSError * error) { if (!gewährt) {return;} EKEvent * eventToRemove = [speicher eventWithIdentifier: savedEventId]; if (eventToRemove) { NSError * Fehler = Null; [Speicher removeEvent: eventToRemove span: EKSpanThisEvent commit: JA Fehler: & Fehler]; } }]; Es gibt keinen Fehler, aber es gibt keine Erlaubnis einfach zurückgeben – Avantika

+0

Sorry, EventIdentifier ist NSMutableArray, wenn Sie das Ereignis, das Sie den Ereignis-ID-Wert aus dem EventStore erhalten haben, speichern Sie den Ereignis-ID-Wert und entfernen Sie den Identifier-Wert, der am besten ist Entferne das Ereignis. versuchen Sie es –