Я пытаюсь добавить идентификатор события из массива NSMutableSet в NSUserDefaults, но когда я делаю, добавляется только одна строка - PullRequest
0 голосов
/ 23 апреля 2020

Я использую объектив- c. Я новичок в этом. Я пробовал десятки разных способов сделать это. Я искал ответ в Google и на этом форуме. Я пытался решить эту проблему в течение нескольких дней. Прошу прощения за просьбу о помощи.

- (IBAction)AddToCalendar:(id)sender {

    NSDateFormatter *formatter = [[NSDateFormatter alloc]init];
    [formatter setDateFormat:@"E, d MMM yyyy HH:mm:ss Z"];

    EKEventStore* store = [EKEventStore new];

    for (NSDate *date in data.datefromserver) {
      [formatter setDateFormat:@"E, d MMM yyyy HH:mm:ss Z"];
      EKEvent *event = [EKEvent eventWithEventStore:store];

      [store requestAccessToEntityType:EKEntityTypeEvent completion:^(BOOL granted, NSError *error) {
          if (!granted) return;

          event.title = @"Event Title";
          event.startDate = date; // today
          event.endDate = [event.startDate dateByAddingTimeInterval:60*60];  // Duration 1 hr
          [event setCalendar:[store defaultCalendarForNewEvents]];
          NSError *err = nil;
          [store saveEvent:event span:EKSpanThisEvent commit:YES error:&err];
          //  self->_savedEventId = event.eventIdentifier;
          // Store this so you can access this event later
          NSString* str = [[NSString alloc] initWithFormat:@"%@", event.eventIdentifier];
          NSMutableArray *arrayofCalIDs = [NSMutableArray new];
          [arrayofCalIDs addObject:str];
          NSLog(@"check ID: %@",arrayofCalIDs);
          [[NSUserDefaults standardUserDefaults] setObject:arrayofCalIDs forKey:@"key1"];
          [[NSUserDefaults standardUserDefaults] synchronize];          
     }];
   }
}

1 Ответ

0 голосов
/ 23 апреля 2020

Проблема в том, что вы создаете массив внутри l oop, поэтому значение перезаписывается в каждой итерации.

Далее вы отправляете запрос на доступ и устанавливаете формат даты (форматер даты в любом случае не используется) ) в каждой итерации, которая является избыточной и должна быть сделана один раз перед l oop тоже.

- (IBAction)AddToCalendar:(id)sender {

    NSDateFormatter *formatter = [[NSDateFormatter alloc]init];
    [formatter setDateFormat:@"E, d MMM yyyy HH:mm:ss Z"];

    EKEventStore* store = [EKEventStore new];
    [store requestAccessToEntityType:EKEntityTypeEvent completion:^(BOOL granted, NSError *error) {
        if (!granted) return;

        NSMutableArray *arrayofCalIDs = [NSMutableArray new];
        for (NSDate *date in data.datefromserver) {
            EKEvent *event = [EKEvent eventWithEventStore:store];
            event.title = @"Event Title";
            event.startDate = date; // today
            event.endDate = [event.startDate dateByAddingTimeInterval:60*60];  // Duration 1 hr
            [event setCalendar:[store defaultCalendarForNewEvents]];
            NSError *err = nil;
            [store saveEvent:event span:EKSpanThisEvent commit:YES error:&err];
            //  self->_savedEventId = event.eventIdentifier;
            // Store this so you can access this event later
            NSString* str = [[NSString alloc] initWithFormat:@"%@", event.eventIdentifier];

            [arrayofCalIDs addObject:str];
            NSLog(@"check ID: %@",arrayofCalIDs);
        }
        [[NSUserDefaults standardUserDefaults] setObject:arrayofCalIDs forKey:@"key1"];
    }];
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...