Fallo de UILocalNotification

Me podría ayudar ?

Estoy configurando una UILocalNotification y se bloquea cuando intento configurar su diccionario userInfo. fetchedObjects contiene 88 objetos.

Aquí está el código:

    NSDictionary* myUserInfo = [NSDictionary dictionaryWithObject: fetchedObjects forKey: @"textbody"];

 UILocalNotification *localNotif = [[UILocalNotification alloc] init];
 if (localNotif == nil)
        return;

 // défining the interval
 NSTimeInterval oneMinute = 60;

 localNotif.timeZone = [NSTimeZone localTimeZone];
 NSDate *fireDate = [[NSDate alloc]initWithTimeIntervalSinceNow:oneMinute];
 localNotif.fireDate = fireDate;

 localNotif.userInfo = myUserInfo; //this is the line that crashes the app
    [fetchedObjects release];

y la consola me da esto:

Property list invalid for format: 200
*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'unable to serialize userInfo: (null)'

¿Alguna idea?

preguntado el 09 de enero de 11 a las 01:01

2 Respuestas

Parece que hay objetos en su diccionario userInfo que no implementan el protocolo NSCoding. Todo en ese diccionario debe poder escribirse en 'disco', ya que es posible que su aplicación no se esté ejecutando cuando se activa la notificación. Si hay algo allí que no se puede serializar, este es el resultado.

Respondido el 09 de enero de 11 a las 13:01

En realidad, tengo objetos en fetchedObjects y todo lo que quiero hacer es recuperar un valor de una clave que se llama textbody. Pero estoy realmente perdido en cuanto a cómo hacer eso. Lo que me gustaría hacer en realidad es crear una UILocalNotification que contenga el valor de textbody (que es una cadena por cierto) para cada uno de los objetos contenidos en fetchedObjects. - Miky Mike

Solo soy un novato y no sé cómo hacerlo, aunque me estoy devanando los sesos con la referencia de clase de NSDictionaries. Si alguien pudiera ayudar, sería muy apreciado. - Miky Mike

Prueba [fetchedObjects valueForKeyPath: @ "textbody"] y obtienes un NSArray que contiene todas las propiedades de textbody de tus objetos. - Jilouc

Gracias por tu ayuda, eso es exactamente lo que estaba buscando. - Miky Mike

En realidad, incluso si se usa un objeto compatible con NSCoding, UILocalNotification lanzará una NSInvalidArgumentException al llamar a setUserInfo. La UILocalNotification aparentemente mantiene una interpretación más estricta de los tipos de lista de propiedades, en la que solo se permiten los objetos de stock especificados en la Guía de programación de la lista de propiedades. Puede solucionar esto utilizando NSKeyedArchiver para serializar su objeto personalizado compatible con NSCoding en una instancia de NSData, que se puede pasar de forma segura a UILocalNotification en el diccionario userInfo.

Respondido 29 ago 11, 23:08

¿Podría dar un ejemplo de NSKeyedArchiver enfoque que mencionaste? - p0lAris

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.