簡體   English   中英

如何在 iOS 中更新或編輯 EKEvent 並使用標識符存儲在本機日歷中?

[英]How to Update or Edit EKEvent in iOS and store in native calendar using identifier?

我在我的應用程序中使用 EKEvent 來獲取所有商店事件,我想通過標識符編輯任何特定事件並重新保存在現有的..那么我應該怎么做?

EKEventStore *store = [EKEventStore new];
    EKEvent *event = [EKEvent eventWithEventStore:store];

    event.title = @"abc";
    event.notes= @"this is updated notes";

    event.calendar = [store defaultCalendarForNewEvents];
    NSError *err = nil;

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

這段代碼用於我用來存儲事件,但是在哪里傳遞標識符以僅更新特定事件?

您應該將事件標識符保存在數據庫中,以便以后可以使用它來更新或刪除事件。 使用以下方法創建事件后:

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

您可以訪問event.eventIdentifier 將其保存在數據庫中。 當您想要編輯特定事件時,只需使用存儲的 ID 獲取該事件:

-(void)updateNotification:(NSMutableDictionary *) info
{
    EKEventStore *eventStore = [[EKEventStore alloc] init];
    [eventStore requestAccessToEntityType:EKEntityTypeEvent completion:^(BOOL granted, NSError *error)
     {
         if (!granted)
         {
             dispatch_async(dispatch_get_main_queue(), ^{

                 UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Cannot access Calendar" message:@"Please give the permission to add task in calendar from iOS > Settings > Privacy > Calendars" delegate:nil cancelButtonTitle:@"OK" otherButtonTitles: nil];
                 [alert show];

             });
             return;
         }

         if (error)
         {
             NSLog(@"%@", error);
         }

         //this is event ID you saved in DB. now you want to edit that event
         EKEvent *event  = [eventStore eventWithIdentifier:info[@"eventID"]]; 

         if(event) {

//You have your valid event. Modify as per your need.

             event.title     = [info valueForKey:@"title"];
             event.notes        = [info valueForKey:@"description"];
             event.startDate = [info objectForKey:@"date"];
             event.endDate   = [[NSDate alloc] initWithTimeInterval:3600*24 sinceDate:event.startDate];
             event.calendar = eventStore.defaultCalendarForNewEvents;

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

         }

     }];
}

希望它有幫助。 隨時提出任何疑問。

這是獲取所有事件的代碼。 參考蘋果演示項目

- (NSMutableArray *)fetchEvents{

    NSDate *startDate = [NSDate date];

    //Create the end date components
    NSDateComponents *tomorrowDateComponents = [[NSDateComponents alloc] init];
    tomorrowDateComponents.day = 1;

    NSDate *endDate = [[NSCalendar currentCalendar] dateByAddingComponents:tomorrowDateComponents
                                                                toDate:startDate
                                                               options:0];
    // We will only search the default calendar for our events
    NSArray *calendarArray = @[self.defaultCalendar];

    // Create the predicate
    NSPredicate *predicate = [self.eventStore predicateForEventsWithStartDate:startDate
                                                                  endDate:endDate
                                                                calendars:calendarArray];

    // Fetch all events that match the predicate
    NSMutableArray *events = [NSMutableArray arrayWithArray:[self.eventStore eventsMatchingPredicate:predicate]];

    return events;
}

參考演示項目:-> EkEvent demo

並參考此 -> 文檔

   func editOneEventToCalendar(id:String,title: String, description: String?,alarams :[EKAlarm],location:String,contacts:[EKParticipant],repeatString :String,timeZone:NSTimeZone, startDate: NSDate, endDate: NSDate , isAllDay :Bool ,calendar:EKCalendar,StruLocation:EKStructuredLocation?)  -> Bool{
    let eventStore = EventsManager.getEventStore()



    let event = EventsManager.geteventID(id: id)
    event.title = title
    event.startDate = startDate as Date
    event.endDate = endDate as Date
    event.notes = description
    event.calendar = calendar

    event.timeZone = timeZone as TimeZone //NSTimeZone() as TimeZone //timeZone as TimeZone

    if StruLocation != nil {
        event.structuredLocation = StruLocation
    }else {

        event.structuredLocation = StruLocation
    }

    event.isAllDay = isAllDay

    if repeatString != "None" {

        let rule = EventsManager.getRepeatValue(repeatString)//self.getRepeatValue(option: repeat)
        event.addRecurrenceRule(rule!)
    }else if repeatString == "None"{


        if event.hasRecurrenceRules {


            let rrrl = event.recurrenceRules

            for i in rrrl! {


                event.removeRecurrenceRule(i)

            }

        }


    }




    for item in alarams {

        event.addAlarm(item)
    }

    //        let formatter = CNContactFormatter()
    //        formatter.style  =
    var attendees = [EKParticipant]()
    //        for item in contacts {
    //
    //            let con = event.(contact: item)
    //            attendees.append(con!)
    //
    //        }



    do {

        try eventStore.save(event, span: .thisEvent, commit: true)

        //try eventStore.save(event, span: .thisEvent)

        // if saved edit the local db ??


        return true

    } catch let e as NSError {


        EZAlertController.alert(e.debugDescription)


    }


    return false

}



   func editFutureEventToCalendar(id:String,title: String, description: String?,alarams :[EKAlarm],location:String,contacts:[EKParticipant],repeatString :String,timeZone:NSTimeZone, startDate: NSDate, endDate: NSDate , isAllDay :Bool,calendar:EKCalendar,StruLocation:EKStructuredLocation?)->Bool {
    let eventStore = EventsManager.getEventStore()



    let event = EventsManager.geteventID(id: id)

    let ocdate = event.occurrenceDate

    event.title = title
    event.startDate = startDate as Date
    event.endDate = endDate as Date
    event.notes = description
    event.calendar = calendar
   // event.occurrenceDate = ocdate


    event.timeZone = timeZone as TimeZone //timezoneNSTimeZone() as TimeZone //timeZone as TimeZone


    event.isAllDay = isAllDay

    if StruLocation != nil {
        event.structuredLocation = StruLocation
    }else {

        event.structuredLocation = StruLocation
    }


    if repeatString != "None" {

        if event.hasRecurrenceRules {


            let rrrl = event.recurrenceRules

            for i in rrrl! {


                event.removeRecurrenceRule(i)

            }

        }


        let rule = EventsManager.getRepeatValue(repeatString)//self.getRepeatValue(option: repeat)
        event.addRecurrenceRule(rule!)
    }else if repeatString == "None"{


        if event.hasRecurrenceRules {


            let rrrl = event.recurrenceRules

            for i in rrrl! {


                event.removeRecurrenceRule(i)

            }

        }


    }






    for item in alarams {

        event.addAlarm(item)
    }
   // event.location = location
    //        let formatter = CNContactFormatter()
    //        formatter.style  =
    var attendees = [EKParticipant]()
    //        for item in contacts {
    //
    //            let con = event.(contact: item)
    //            attendees.append(con!)
    //
    //        }



    do {

        try eventStore.save(event, span: .futureEvents, commit: true)

        //try eventStore.save(event, span: .thisEvent)

        return true

    } catch let e as NSError {


        EZAlertController.alert(e.debugDescription)
    }



    return false 
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM