XCode / IOS: NSCoding - persistenza del grafico oggetto con due array di oggetti comuni

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

  •  22-10-2019
  •  | 
  •  

Domanda

Ho due classi che assomigliano a questo barebone formano:

@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

Si noterà che sembrano esprimere lo stesso comportamento - la codifica / decodifica di un NSMutableArray i cui contenuti sono oggetti di un tipo che implementa GraphEdge NSCoding. La differenza tra le classi, in pratica, è che GraphEdges crea bordi nella sua proprietà edges, mentre GraphNode aggiunge al proprio edges solo riferimenti alle istanze GraphEdge già esistenti in GraphEdges.edges.

Il mio problema è che quando si decodifica GraphNode e GraphEdges oggetti l'oggetto grafico non viene mantenuta in quanto ogni classe crea le proprie versioni dell'originale GraphEdge oggetti memorizzati nella proprietà edges per ogni classe.

è tentato di eseguire un'encodeConditionalObject sull'intera NSMutableArray * bordi in GraphNode mantenendo la codifica in GraphEdges incondizionata, ma non sorprende questo semplicemente non riesce a GraphNode.edges codificare come la condizione è posto sulla matrice stessa, non suoi oggetti.

E 'la soluzione per scorrere le matrici in entrambi i casi, ed eseguire la codifica subordinata ogni membro edges per GraphNode ma la codifica incondizionato per ogni membro della edges in GraphEdges?

Ogni consiglio è apprezzato, molte grazie.

È stato utile?

Soluzione

Credo che il problema qui è che si sta archiviando GraphNode e GraphEdges oggetti separatamente. Unire tutti i relativi GraphNode e GraphEdges oggetti in una sorta di contenitore, forse 'Graph', in modo che essi diventano tutti parte dello stesso oggetto grafico. Credo che NSKeyedArchiver poi archiviare ogni oggetto una sola volta.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top