2017-11-01 7 views
3

Ich führe den folgenden Code aus, damit der Benutzer mehrere Kalender für meine Notizblock-App auswählen kann. Bis iOS 10.3.1 gab es kein Problem. Unter 11.0.2 funktionierte es noch an aktiven Geräten. Seit 11.1 stürzt es jedoch mit dem folgenden Fehler ab.EKCalendarChooser stürzt auf iOS11.1 ab.

*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '*** -[__NSDictionaryM setObject:forKeyedSubscript:]: key cannot be nil' 

Der Code ist wie folgt. Im Grunde öffne ich eine leere Kalenderauswahl.

if (_eventStore == nil) { 
    _eventStore = [[EKEventStore alloc] init]; 
} 
// the selector is available, so we must be on iOS 6 or newer 
[_eventStore requestAccessToEntityType:EKEntityTypeEvent 
          completion:^(BOOL granted, NSError *error) { 
           dispatch_async(dispatch_get_main_queue(), ^{ 
            if (error) 
            { 
             // display error message here 
            } 
            else if (!granted) 
            { 
             // display access denied error message here 
            } 
            else 
            { 
             // access granted 

             EKCalendarChooser *calendarChooser = [[EKCalendarChooser alloc] 
                      initWithSelectionStyle:EKCalendarChooserSelectionStyleMultiple 
                      displayStyle:EKCalendarChooserDisplayAllCalendars 
                      eventStore:_eventStore]; 

             calendarChooser.modalTransitionStyle = UIModalTransitionStyleCoverVertical; 
             calendarChooser.delegate = self; 
             calendarChooser.showsCancelButton = YES; 
             calendarChooser.showsDoneButton = YES; 


              NSSet *calendarSet = [[NSSet alloc] init]; 
              calendarChooser.selectedCalendars = calendarSet; 


             UINavigationController *sub = [[UINavigationController alloc] initWithRootViewController:calendarChooser]; 
             sub.navigationBar.barStyle = UIBarStyleDefault; 
             sub.toolbar.barStyle = UIBarStyleDefault; 
             [self presentViewController:sub animated:YES completion:nil]; 
             //ios11 crashes after this 
            } 
           }); 
          }]; 

Danke für Ihre Hilfe.

Antwort

4

Es stellt sich heraus, dass EKCalendarChooserDisplayAllCalendars den Absturz verursacht hat. Obwohl es nicht ideal ist, kann ich jetzt den Absturz vermeiden, wenn iOS 11.1 oder höher ist.

         EKCalendarChooserDisplayStyle displayStyle = EKCalendarChooserDisplayAllCalendars; 
             if (@available(iOS 11.1, *)) { 
              displayStyle = EKCalendarChooserDisplayWritableCalendarsOnly; 
             } 
             EKCalendarChooser *calendarChooser = [[EKCalendarChooser alloc] 
                      initWithSelectionStyle:EKCalendarChooserSelectionStyleMultiple 
                      displayStyle:displayStyle 
                      eventStore:eventStore]; 
+0

Ran in das gleiche Problem. Das ist wirklich schlecht, wenn ich nur auf beschreibbare Kalender zugreifen kann. –

+0

Ja, absolut schrecklich. Zumindest Apple wird bestätigt, dass es Probleme gibt. (Das Initialisieren eines EKCalendarChooser von EventKit kann zu einem Absturz der App führen. (34608102)) https://developer.apple.com/library/content/releasenotes/General/RN-iOS-11.1/index.html#//apple_ref/doc/uid/TP40017683-CH1-SW1 – yoshitech

+0

Ich habe an diesem Wochenende einen weiteren Fehler gefunden. Wenn Sie ein EKEvent mit einer Start- und Endzeit zwischen 1 Uhr morgens und 2 Uhr morgens während der Änderung der Herbstzeit speichern, wenn die Uhrzeit das zweite Auftreten von 1 Uhr morgens bis 2 Uhr nachts ist, subtrahiert die Datenbank eine Stunde bis zur Endzeit (aber nicht die Startzeit). was zu einem Ereignis führt, das nach dem Ende beginnt. Ich habe einen Fehlerbericht eingereicht, aber ich bin neugierig, ob noch jemand diesen Fehler reproduzieren kann. Beachten Sie, dass Sie das unformatierte Datum abfragen müssen, da beide Datumsangaben dasselbe unter Verwendung des Gebietsschema-Datumsformats formatieren. –