User Tag List

Resultados 1 al 2 de 2

Tema: [Cocoa] Problema al guardar datos a disco con NSCFString

  1. #1

    Fecha de ingreso
    Sep 2006
    Ubicación
    Malaga
    Mensajes
    7,561
    Mencionado
    47 Post(s)
    Tagged
    0 Tema(s)
    Agradecer Thanks Given 
    1,668
    Agradecer Thanks Received 
    1,922
    Thanked in
    Agradecido 1,289 veces en [ARG:2 UNDEFINED] posts

    Question [Cocoa] Problema al guardar datos a disco con NSCFString

    Llevo varios dias con esto y no doy con la tecla. Lo gordo de la aplicación esta hecha en C++, después tengo hecho el interface en Objective C++.

    Tengo un NSTableView que muestra una lista de etiquetas, cuando se modifican se llama al delegado - (void)tableView: (NSTableView *)tableView setObjectValue: (id)object forTableColumn: (NSTableColumn *)tableColumn row: (NSInteger)row Y allí modifico el valor en una clase en C++, después al guardar los datos a disco convierto la tabla en C++ a NSMutableArray con objetos de tipo Label.

    No entiendo dos cosas.

    1. dependiendo del nombre que le ponga a la etiqueta esta me viene en el campo object (del delegado) como NSTaggedPointerString* o como NSCFString*, WTF!?!?!

    2 Cuando vuelco los datos de C++ al NSMutableArray (etiquetas modificadas) aunque todas pasen por la misma llamada, el campo name de las etiquetas se guardan como NSTaggedPointerString y otras como NSCFString, estas ultimas dan problemas al leerlas después.


    Código:
    - (void)saveConfig:(NSString *)filename{
       NSMutableDictionary *root = [NSMutableDictionarydictionary];
        [root setValue: [NSNumbernumberWithInteger: mLoadAddress] forKey:@"loadAddress"];
        [root setValue: [NSNumbernumberWithInteger: mStartAddress] forKey:@"startAddress"];
        [root setValue: [NSNumbernumberWithInteger: mSystem] forKey:@"system"];
        [root setObject: [NSKeyedArchiverarchivedDataWithRootObject:entryPoints] forKey:@"entryPoints"];
    
    
    // etiquetas modificadas
       NSMutableArray *labelsModified = [[NSMutableArrayalloc] init];
       for ( auto &label : mSymbolTableModified )
            [labelsModified addObject:[[Label alloc] initLabel:[NSString stringWithUTF8String:label.second.name.c_str()] withValue:label.second.address]];
    
    
        [root setObject: [NSKeyedArchiverarchivedDataWithRootObject:labelsModified] forKey:@"labels"];
    
    
    // chunks
       NSMutableArray *chunks = [[NSMutableArrayalloc] init];
        for ( auto c : mChunks )
        {
            [chunks addObject:[[MemoryBlockalloc] initWithAddress:c.startendAddress:c.endrelocateTo:c.org
                                                              type:[NSString stringWithUTF8String:c.type.c_str()]
                                                        parameters:[NSString stringWithUTF8String:c.params.c_str()]]];
        }
        [root setObject: [NSKeyedArchiverarchivedDataWithRootObject:chunks] forKey:@"chunks"];
    
    
    
        [[NSUserDefaultsstandardUserDefaults] setObject:root forKey:filename];
    }
    Una captura de lo que hay en labelsModified antes de guardar.

    Nombre:  Captura de pantalla 2019-08-30 a las 19.55.28.png
Visitas: 444
Tamaño: 34.6 KB

    ¿Alguna idea de como corregir esto?
    Puedo probar usando los bindings en vez del protocolo NSTableViewDelegate pero me da pereza ponerme a cambiar cosas.
    No es lo mismo tener diez años de experiencia, que tener un año de experiencia diez veces.


    It is an undisputed truth that the Atari ST gets the best out of coders. No dedicated hardware, just the CPU and a frame buffer! Some call it Spartan, others name it Power Without The Price, and a select few say `challenge accepted'! --- by spkr from smfx

  2. #2

    Fecha de ingreso
    Sep 2006
    Ubicación
    Malaga
    Mensajes
    7,561
    Mencionado
    47 Post(s)
    Tagged
    0 Tema(s)
    Agradecer Thanks Given 
    1,668
    Agradecer Thanks Received 
    1,922
    Thanked in
    Agradecido 1,289 veces en [ARG:2 UNDEFINED] posts
    Con bindings parece que va, le añado un observador con
    [labelsArrayControlleraddObserver:selfforKeyPath:@"arrangedObjects.name"options: (NSKeyValueObservingOptionNew | NSKeyValueObservingOptionOld) context:_nameContext]; y con
    - (void)observeValueForKeyPath: (NSString *)keyPath ofObject: (id)object change: (NSDictionary<NSKeyValueChangeKey,id> *)change context: (void *)context
    me "llegan los cambios", me explico, se llama a ese método pero el diccionario con los cambios siempre esta vacío. Fuuuu!!!!!!!!!!!!!!!1!!!!

    Que harto que estoy, con lo que mola programar a bajo nivel, si no lo tienes lo programas tu y ya esta, es mas trabajo pero no te encuentras con cosas que no funcionan. He estado mirando por google y parece que con los NSArrayController da problemas, no entiendo como pueden tener esto mal.
    No es lo mismo tener diez años de experiencia, que tener un año de experiencia diez veces.


    It is an undisputed truth that the Atari ST gets the best out of coders. No dedicated hardware, just the CPU and a frame buffer! Some call it Spartan, others name it Power Without The Price, and a select few say `challenge accepted'! --- by spkr from smfx

Permisos de publicación

  • No puedes crear nuevos temas
  • No puedes responder temas
  • No puedes subir archivos adjuntos
  • No puedes editar tus mensajes
  •