0

MBProgressHUD オブジェクトを表示したい - プロセス中の progressHud は、カレンダーに約 100 のイベントを自動追加します。このタスクを実行するためにボタンをタッチしたときのコードは次のとおりです。

- (IBAction)add_event_for_test:(id)sender{
    self.progressHud = [[MBProgressHUD alloc] initWithView:self.view];
    self.progressHud.labelText = @"Adding some events to test";
    self.progressHud.detailsLabelText = @"Please wait...";
    [self.view addSubview:self.progressHud];
    [self.progressHud showWhileExecuting:@selector(add_more_event_execute:) onTarget:self withObject:nil animated:YES]; 
}

以下の add_more_event_execute 関数で、EKEntityTypeEvent のエンティティ タイプへのアクセスを要求して、新しいイベントを iOS6 のカレンダーに追加しようとすると、progressHud が表示され、すぐに非表示になります。すべてのイベントがカレンダーに完全に追加されるまで、progressHud を表示する必要があります。私が Access を要求せず、iOS5 で実行すると、progressHud はうまく機能します。

- (void) add_more_event_execute: (id)object{

    @autoreleasepool {
        eventStore=[[EKEventStore alloc] init];
        if([eventStore respondsToSelector:@selector(requestAccessToEntityType:completion:)]) {

            // iOS 6 and later
            [eventStore requestAccessToEntityType:EKEntityTypeEvent completion:^(BOOL granted, NSError *error) {

                if (granted){
                // now add 100 event to calendar
                    int i = 0;
                    while (i < 100) {
                        EKEvent *addEvent=[EKEvent eventWithEventStore:eventStore];
                        NSString *tmp1 = @"Title iOS6: ";
                        tmp1 = [tmp1 stringByAppendingString:[NSString stringWithFormat: @" %d",i]];
                        addEvent.title = tmp1;

                        NSCalendar *calendar = [NSCalendar currentCalendar];
                        NSDateComponents *components = [calendar components:(NSYearCalendarUnit | NSMonthCalendarUnit ) fromDate:[NSDate date]];
                        [components setMonth:0];
                        [components setDay:i - 50]; //reset the other components
                        [components setYear:0]; //reset the other components
                        NSDate *dayi = [calendar dateByAddingComponents:components toDate:[NSDate date] options:0];
                        addEvent.startDate = dayi;
                        addEvent.endDate = [addEvent.startDate dateByAddingTimeInterval:600];
                        [addEvent setCalendar:[eventStore defaultCalendarForNewEvents]];

                        NSError *err;
                        [eventStore saveEvent:addEvent span:EKSpanThisEvent error:&err];
                        if (err == nil) {
                            NSString* str = [[NSString alloc] initWithFormat:@"%@", addEvent.eventIdentifier];
                            NSLog(@"String iOS6 %d: %@ ngay:%@ ",i, str,addEvent.startDate);
                        }
                        else {
                            NSLog(@"Error %@",err);
                        }
                        i++;
                    } 
                }
                else
                {
                    //----- codes here when user NOT allow your app to access the calendar.
                }

            }];

        }
    }
}

私の問題を説明し、解決策を教えてください。ありがとう!

4

0 に答える 0