将元素从NSDictionary复制到方法返回的对象

时间:2013-01-14 17:11:10

标签: objective-c copy nsdictionary

我正在调用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;
}

我遇到的问题是使用objectForKey的{​​{1}}方法:NSDictionary对象的属性没有被分配,当我评估这些表达式时,我得到的:

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 的内存管理有关 - 就像我试图得到的对象不被保留 - 但是 我对此很新,并且不知道问题可能是什么,所以请帮助我!

谢谢!

1 个答案:

答案 0 :(得分:1)

+parsear:中,您实际上并未实例化dhNovedades的实例。你应该在第一行做到这一点:

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

这将是解决问题的一个开始,因为我们不知道您提供了dhNovedades的属性或访问者的设置。

另一件事,无关紧要:你的班级名称应该大写。如果“dh”是一个前缀,则两个字母都应该大写。