0

我正在调用一个 JSON 服务,我从中得到:

JSON=__NSCFDictionary * 0x0c3a1310 3 key/value pairs

description是:

Printing description of JSON:
{
    codigo = 0;
    datos =     (
                {
            datalle = "Ahora podr\U00e1s copiar y pegar el RFC y la raz\U00f3n social del cliente.";
            datalletop = "Ahora podr\U00e1s copiar y pegar el RFC y la raz\U00f3n social del cliente.";
            "etiqueta_modulo" = "Administraci\U00f3n de clientes";
            modulo = "ADMIN_CLIENTES";
            seccion = SERVICIOS;
            "titulo_cambio" = Copiar;
            urlimagen = "images/novedades/adm.png";
        },
                {
            datalle = "En caso de que alg\U00fan usuario est\U00e9 inhabilitado para comisionarse, se mostrar\U00e1 un mensaje.";
            datalletop = "En caso de que alg\U00fan usuario est\U00e9 inhabilitado para comisionarse, se mostrar\U00e1 un mensaje.";
            "etiqueta_modulo" = Comisionate;
            modulo = COMISIONATE;
            seccion = SERVICIOS;
            "titulo_cambio" = Bloqueo;
            urlimagen = "images/novedades/comisionate.png";
        },
                {
            datalle = "Ya puedes enviar el recibo fiscal en formato XML.";
            datalletop = "Ya puedes enviar el recibo fiscal en formato XML.";
            "etiqueta_modulo" = "Impresi\U00f3n y env\U00edo de fianzas y recibos";
            modulo = IMPRESION;
            seccion = SERVICIOS;
            "titulo_cambio" = "Recibo en XML";
            urlimagen = "images/novedades/impresion.png";
        },
                {
            datalle = "Es un nuevo m\U00f3dulo que permitir\U00e1 subir documentos a la aplicaci\U00f3n a partir del carrete de fotos del iPad, sustituyendo la aplicaci\U00f3n Integrador.";
            datalletop = "Es un nuevo m\U00f3dulo que permitir\U00e1 subir documentos a la aplicaci\U00f3n a partir del carrete de fotos del iPad, ...";
            "etiqueta_modulo" = "Carga de documentos";
            modulo = INTEGRADOR;
            seccion = SERVICIOS;
            "titulo_cambio" = "Nuevo m\U00f3dulo";
            urlimagen = "images/novedades/cargadoc.png";
        },
                {
            datalle = "Ya puedes personalizar el rango de fechas entre 1 d\U00eda y 1 a\U00f1o. ";
            datalletop = "Ya puedes personalizar el rango de fechas entre 1 d\U00eda y 1 a\U00f1o. ";
            "etiqueta_modulo" = Exportador;
            modulo = EXPORTADOR;
            seccion = "INTELIGENCIA DE NEGOCIOS";
            "titulo_cambio" = "Rango de fechas";
            urlimagen = "images/novedades/exportador.png";
        },
                {
            datalle = "En la secci\U00f3n de detalle de este m\U00f3dulo, encontrar\U00e1s la opci\U00f3n de filtrar la informaci\U00f3n seg\U00fan la moneda.";
            datalletop = "En la secci\U00f3n de detalle de este m\U00f3dulo, encontrar\U00e1s la opci\U00f3n de filtrar la informaci\U00f3n seg\U00fan la moneda.";
            "etiqueta_modulo" = Renovaciones;
            modulo = RENOVACIONES;
            seccion = "INTELIGENCIA DE NEGOCIOS";
            "titulo_cambio" = "Filtro por moneda";
            urlimagen = "images/novedades/ren_cancelaciones.png";
        },
                {
            datalle = "En el reporte de Mezcla de cartera por ramos encontrar\U00e1s un scroll para poder ver m\U00e1s informaci\U00f3n.";
            datalletop = "En el reporte de Mezcla de cartera por ramos encontrar\U00e1s un scroll para poder ver m\U00e1s informaci\U00f3n.";
            "etiqueta_modulo" = Ventas;
            modulo = VENTAS;
            seccion = "INTELIGENCIA DE NEGOCIOS";
            "titulo_cambio" = "Mejora en la visualizaci\U00f3n";
            urlimagen = "images/novedades/ventas.png";
        },
                {
            datalle = "\b<ul><li>Mis clientes. Mundo Aserta hace la inteligencia de negocio por ti, permiti\U00e9ndote enfocarte en lo m\U00e1s importante de tu cartera. \U00bfC\U00f3mo? Analizando de primera vista las ventas, primas por cobrar, reclamaciones y renovaciones de tus 20 principales clientes.</li><li>Programas de proveedores. Consulta la informaci\U00f3n a detalle de cada uno de los programas de tus clientes</li><li>Movimientos. Realiza endosos de aumento a tus p\U00f3lizas de fianzas desde este m\U00f3dulo. Ya puedes realizar tambi\U00e9n cancelaci\U00f3n, disminuci\U00f3n y anula y sustituye de fianza y recibo. </li><li>Podr\U00e1s recibir notificaciones a trav\U00e9s de alertas sobre los movimientos que est\U00e1n en proceso de autorizaci\U00f3n, liberaci\U00f3n o impresi\U00f3n.</li><li>Tablero de control. Te mostrar\U00e1 tus principales indicadores como son: comportamiento de ventas; reclamaciones pagadas, recibidas y recuperadas; primas por cobrar por antig\U00fcedad y d\U00edas cartera; responsabilidades vigentes para cancelar o renovar</li><li>Emisi\U00f3n de fianzas en programas globales de fianzas vehiculares. Ya puedes emitir estas fianzas desde este nuevo m\U00f3dulo</li><li>Genera tu token para poder entrar en modo fuera de l\U00ednea y accesar a los m\U00f3dulos de inteligencia de negocios, Espacio Aserta y Campus Aserta</li></ul>";
            datalletop = "\b<ul><li>Mis clientes. Mundo Aserta hace la inteligencia de negocio por ti, permiti\U00e9ndote enfocarte en lo m\U00e1s ...";
            "etiqueta_modulo" = General;
            modulo = GENERAL;
            seccion = GENERAL;
            "titulo_cambio" = General;
            urlimagen = "images/novedades/general.png";
        },
                {
            datalle = "<ul><li>En caso de que existan fallas de procesamiento de informaci\U00f3n en los sistemas, la secci\U00f3n de Inteligencia de negocios ser\U00e1 bloqueada</li><li>Ya puedes copiar y pegar cualquier dato de la secci\U00f3n Inteligencia de negocios.</li><li>Ahora podr\U00e1s enviar por correo reportes de la secci\U00f3n Inteligencia de negocios sin l\U00edmite de resultados.</li><li>En esta secci\U00f3n, ya podr\U00e1s filtrar la informaci\U00f3n utilizando m\U00e1s de un filtro simult\U00e1neamente.</li></ul>\n";
            datalletop = "<ul><li>En caso de que existan fallas de procesamiento de informaci\U00f3n en los sistemas, la secci\U00f3n de Inteligencia de ...";
            "etiqueta_modulo" = Generales;
            modulo = GENERAL;
            seccion = GENERAL;
            "titulo_cambio" = "Mejoras en toda la aplicaci\U00f3n";
            urlimagen = "images/novedades/general.png";
        }
    );
    mensaje = EXITO;
}
(lldb) 

我有这个方法:

+(dhNovedades*)parsear:(NSDictionary*) pdicDatos
{
    dhNovedades *novedades;
    novedades.mensaje = [pdicDatos objectForKey:@"mensaje"];
    novedades.novedades = [pdicDatos objectForKey:@"datos"];

    return novedades;
}

我将生成的 JSON 传递给它NSDictionary以获取一个dhNovedades对象,该对象的定义如下:

@interface dhNovedades : NSObject
{
    NSString *login;
    NSString *id_sesion;
    NSMutableArray *novedades;
    NSString *mensaje;
}

我遇到的问题是objectForKeyNSDictionary对象的属性dhNovedades没有被分配,当我评估这些表达式时,我得到:

[pdicDatos objectForKey:@"mensaje"] = Invalid Expression

我复习了的内容,NSDictionary pdicDatos三要素是类型__NSCFString;我想这与问题有关,因为我正在分配

novedades.mensaje = [pdicDatos objectForKey:@"mensaje"]; //mensaje is a NSString
novedades.novedades = [pdicDatos objectForKey:@"datos"]; //novedades.novedades is a NSMutableArray

我在某处读到这可能与内存管理有关NSDictionary——比如我试图不保留的对象——但我对此很陌生,不知道问题可能是什么,所以请帮我!

谢谢!

4

1 回答 1

1

+parsear:中,您实际上并没有实例化dhNovedades. 您应该在第一行执行此操作:

dhNovedades *novedades = [[dhNovedades alloc] init];

这将是解决您的问题的开始,因为我们不知道您提供的内容是如何设置您的属性或访问器的dhNovedades

另一件事,无所谓:你的类名应该大写。如果“dh”是前缀,则两个字母都应大写。

于 2013-01-14T17:35:17.310 回答