defaultCalendarForNewEvents error

Cuando intento llamar a [newEventStore defaultCalendarForNewEvents], devuelve un mensaje de error que dice:

[707:907] defaultCalendarForNewEvents failed: Error Domain=EKCADErrorDomain Code=1013 "The operation couldn’t be completed. (EKCADErrorDomain error 1013.)"
[707:907] Error!Failed to save appointment. Description:Error Domain=EKErrorDomain Code=1 "No calendar has been set." UserInfo=0x1fc679f0 {NSLocalizedDescription=No calendar has been set.}

La aplicación se ejecuta durante un largo tiempo. El problema vino a mí por primera vez. El teléfono funciona IOS6 Beta4. modelo de iphone 4.
Hay alguien que sabe cuando el defaultCalendarForNewEvents método se fallado? No puedo obtener ninguna información útil a partir de googlear.

  • Me sale este error DESPUÉS de haber sido exitosamente a la autorización otorgada con [eventStore requestAccessToEntityType:EKEntityTypeEvent completion:^{ run my code that test this }
InformationsquelleAutor Alex.BIG | 2012-09-17

8 Kommentare

  1. 54

    En iOS6, Apple introdujo un nuevo control de la privacidad que permite al usuario controlar el acceso de los contactos y los calendarios para cada aplicación. Así, en el código, necesita agregar alguna manera de solicitar el permiso. En iOS5 o antes, siempre podemos llamar a

    EKEventStore *eventStore = [[[EKEventStore alloc] init] autorelease];
    if ([eventStore respondsToSelector:@selector(requestAccessToEntityType:completion:)]) {
        //iOS 6 and later
        [eventStore requestAccessToEntityType:EKEntityTypeEvent completion:^(BOOL granted, NSError *error) {
            if (granted) {
                //code here for when the user allows your app to access the calendar
                [self performCalendarActivity:eventStore];
            } else {
                //code here for when the user does NOT allow your app to access the calendar
            }
        }];
    } else {
        //code here for iOS < 6.0
        [self performCalendarActivity:eventStore];
    }
  2. 14

    De la aplicación de Ios no será capaz de obtener todos los datos del Calendario en el iOS6 sistema si usted no llama a la – requestAccessToEntityType:finalización: función para mostrar un cuadro de diálogo para pedir a los usuarios para conceder el acceso a la aplicación para acceder al Calendario y recordatorios . El código se verá así:

    //CalendarEventHandler.h  
    @interface CalendarEventHandler : NSObject
    {
    EKEventStore *eventStore;
    }
    @property (nonatomic, strong) EKEventStore *eventStore;
    
    
    //CalendarEventHandler.m 
    self.eventStore =[[EKEventStore alloc] init];
    if([self checkIsDeviceVersionHigherThanRequiredVersion:@"6.0"]) {
            [self.eventStore requestAccessToEntityType:EKEntityTypeEvent completion:^(BOOL granted, NSError *error) {
    
                if (granted){
                    //---- codes here when user allow your app to access theirs' calendar.
    
                }else
                {
                    //----- codes here when user NOT allow your app to access the calendar.  
                }  
            }];
    
        }else {
                    //---- codes here for IOS < 6.0.
    
        }

    //A continuación es el de un bloque para la comprobación de la actual versión de ios superior a la versión necesaria.

     - (BOOL)checkIsDeviceVersionHigherThanRequiredVersion:(NSString *)requiredVersion
     {
      NSString *currSysVer = [[UIDevice currentDevice] systemVersion];
    
       if ([currSysVer compare:requiredVersion options:NSNumericSearch] != NSOrderedAscending)
       {
           return YES;
       }
    
           return NO;
      }
  3. 7

    iOS6+ requiere la autenticación de los usuarios a ahorrar evento a su calendario del dispositivo.
    Aquí es un código snippt:

        //save to iphone calendar
        EKEventStore *eventStore = [[EKEventStore alloc] init];
        if([eventStore respondsToSelector:@selector(requestAccessToEntityType:completion:)])
        {
            //iOS 6 and later
            //This line asks user's permission to access his calendar
            [eventStore requestAccessToEntityType:EKEntityTypeEvent completion:^(BOOL granted, NSError *error)
            {
                if (granted) //user user is ok with it
                {
                    EKEvent *event = [EKEvent eventWithEventStore:eventStore];
                    event.title  = aTitle;
                    event.allDay = YES;
    
                    NSDateFormatter *dateFormat = [[UIApplicationSingleton sharedManager] aDateFormatter];
                    [dateFormat setDateFormat:@"MMM dd, yyyy hh:mm aaa"];
                    event.startDate = event.endDate = //put here if start and end dates are same
    
                    [event setCalendar:[eventStore defaultCalendarForNewEvents]];
                    NSError *err;
    
                    [eventStore saveEvent:event span:EKSpanThisEvent error:&err];
    
                    if(err)
                        NSLog(@"unable to save event to the calendar!: Error= %@", err);
    
                }
                else //if he does not allow 
                {
                    [[[UIAlertView alloc]initWithTitle:nil message:alertTitle delegate:nil cancelButtonTitle:NSLocalizedString(@"plzAlowCalendar", nil)  otherButtonTitles: nil] show];
                    return;
                }
            }];
        }
    
        //iOS < 6
        else
        {
            EKEvent *event = [EKEvent eventWithEventStore:eventStore];
            event.title  = aTitle;
            event.allDay = YES;
    
            NSDateFormatter *dateFormat = [[UIApplicationSingleton sharedManager] aDateFormatter];
            [dateFormat setDateFormat:@"MMM dd, yyyy hh:mm aaa"];
            event.startDate = event.endDate = //put here if start and end dates are same
    
            [event setCalendar:[eventStore defaultCalendarForNewEvents]];
            NSError *err;
    
            [eventStore saveEvent:event span:EKSpanThisEvent error:&err];
    
            if(err)
                NSLog(@"unable to save event to the calendar!: Error= %@", err);
    
        }

    Y revisar mi post si se enfrentan a problemas en la configuración de alarma de la aplicación.

    • Creo que el UIAlertView en la realización bloque no se causa por el trabajo de llamar a UIKit de otro hilo…
    • Presentado revisión para corregir el problema señalado por @tapmonkey.
  4. 3

    Resuelto.
    Yo accidentalmente apagar la aplicación el acceso a calendario en Configuración->Privacidad en IOS6

    • Tengo el mismo problema. Pero mi aplicación no pide permiso para acceder a calendario. ¿Por qué es eso?
    • una vez que usted ha dado/denegado los permisos de no molestar al usuario de nuevo molestando para los permisos.
    • agregar esta opción como solución. por lo que se debe aceptar como respuesta
  5. 3

    Tuve el mismo problema, pero, finalmente, encontrar cuál fue el motivo.

    Mi caso era para agregar mi Recordatorio de Calendario y eventos, pero yo estaba usando una EKEventStore. Al final me he separado de ellos y el problema desaparecio:

    private static let calendarEventStore = EKEventStore()
    private static let remindersEventStore = EKEventStore()

    Así que ahora estoy usando calendarEventStore para todas las cosas relacionadas con el calendario de eventos y remindersEventStore para recordatorio.

    En mi opinión, fue relacionado con el hecho de que me pidió defaultCalendarForNewEvents y defaultCalendarForNewReminders() en una EKEventStore entidad.

    También esta uno de EKEventStore docs:

    Eventos, Recordatorios, Calendario y objetos recuperados de un evento de la tienda
    no se puede utilizar con cualquier otro evento de la tienda

  6. 1

    Swift forma

    (basado en @yunas respuesta)

    _estore = EKEventStore()
    _estore.reset()
    
    _estore.requestAccessToEntityType(EKEntityTypeEvent) { (granted, error) in
        if granted {
            println("allowed")
            /* ... */
        } else {
            println("not allowed")
        }           
    }

    Se abrirá el «Acceso» pop-up

  7. 0

    Ir al Simulador del Dispositivo/ajustes/Privacidad/Calendarios/YourApp Toque para permitir el acceso de calendario.
    Y vuelva a intentar el código.Va a trabajar.

  8. 0

    Para Xamarin usuarios:

    EKEventStore eventStore = new EKEventStore();
    eventStore.RequestAccess(EKEntityType.Event, (bool granted, NSError e) =>
    {
        if (granted)
        {
           //Your code here when user gief permissions
        }
    });

Kommentieren Sie den Artikel

Bitte geben Sie Ihren Kommentar ein!
Bitte geben Sie hier Ihren Namen ein

Pruebas en línea