Xcode/iOS: nscoding - persistencia del gráfico de objetos con dos matrices de objetos comunes

StackOverflow https://stackoverflow.com/questions/5301180

  •  22-10-2019
  •  | 
  •  

Pregunta

Tengo dos clases que se ven así en forma básica:

@interface GraphNode {
    NSMutableArray *edges;
}

@implementation GraphNode

-(id)initWithCoder:(NSCoder *)coder {
    if (self = [super init]) {
        edges = [coder decodeObjectForKey:@"edges"];
    }
    return self;
}

-(void)encodeWithCoder:(NSCoder*)coder {
    [coder encodeObject:edges forKey:@"edges"];
}

@end

@interface GraphEdges {
  NSMutableArray *edges;
}

@implementation GraphEdges

-(id)initWithCoder:(NSCoder *)coder {
    if (self = [super init]) {
        edges = [coder decodeObjectForKey:@"edges"];
    }
    return self;
}

-(void)encodeWithCoder:(NSCoder*)coder {
    [coder encodeObject:edges forKey:@"edges"];
}

@end

Notará que parecen expresar el mismo comportamiento: codificar/decodificar una nsmutableArray cuyo contenido son objetos de un tipo de gráfico que implementa Nscoding. La diferencia entre las clases en la práctica es que Graphedges crea bordes en su edges propiedad, mientras que Graphnode se suma a la suya edges Solo referencias a instancias de Graphedge ya existentes en Graphedges.edges.

Mi problema es que al decodificar los objetos de Graphnode y Graphedges, el gráfico de objetos no se mantiene ya que cada clase crea sus propias versiones de los objetos de Graphedge originales almacenados en el edges propiedad para cada clase.

Traté de hacer un colector de código de codificación en los bordes nsmutableArray *en grafnode mientras mantengo la encuesta en gráficos incondicionales, pero, como era de esperar, esto simplemente no puede codificar grafnode.edges a medida que la condición se coloca en la matriz en sí, no en sus objetos.

Es la solución para iterar a través de las matrices en ambos casos y realizar una codificación condicional en cada edges miembro para grafnode pero codificación incondicional para cada miembro de edges en gráficos?

Se agradece cualquier consejo, muchas gracias.

¿Fue útil?

Solución

Creo que el problema aquí es que estás archivando los objetos de Graphnode y Graphedges por separado. Combine todos los objetos de gráficos y gráficos relacionados en algún tipo de contenedor, tal vez 'gráfico', para que todos se conviertan en parte del mismo gráfico de objetos. Creo que Nskeyedarchiver archivará cada objeto solo una vez.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top