Codificar nsarray ou nsdictionary usando nscoder
-
19-09-2019 - |
Pergunta
Eu queria saber se é possível usar ou não o método NScoder:
- (void)encodeObject:(id)objv forKey:(NSString *)key
para codificar uma instância de nsarray ou nsdictionary. Se não, como você os codifica? Estou tentando usar o NSkeyedarchived / nskeyeduNarchiver para enviar dados entre telefones usando o GameKit. Eu tentei e não consigo recuperar a corda que eu armazenei na minha matriz. A aula de pacotes que eu fiz aparece junto com o número inteiro do tipo de pacote, mas não os dados da matriz que parece.
Desde já, obrigado!
Solução
O NSKEYEDARCHIVER/UNARCIVER deve codificar e decodificar nsarrays e nsdictionaries sem nenhum problema. Se a sua aula de pacotes que você criou implementar o protocolo NSCODing, você precisa ligar explicitamente [encodeObject:
myNsArray
forKey:@"stringsArray"]
na tua -encodeWithCoder:
método (assumindo que MyNSarray é o nome da variável de instância no seu objeto de pacote que você deseja codificar). Mas então o arquiver e o nsarray devem cuidar do resto. Se você está fazendo isso, seria útil ouvir mais sobre o layout de suas aulas e quem está chamando quem ao codificar/decodificar.
Outras dicas
Se a matriz ou dicionário for o objeto raiz que você deve fazer
NSData * encodedData = [NSKeyedArchiver archivedDataWithRootObject:someArray];
ou
BOOL success = [NSKeyedArchiver archiveRootObject:someArray toFile:filePath];
Se for uma variável de instância de uma classe personalizada, no -encodeWithCoder:
o método deve fazer
[coder encodeObject:someArray forKey:@"someArray"];
E então no -initWithCoder:
método
someArray = [[coder decodeObjectForKey:@"someArray"] retain];
Que tipo de objetos você está armazenando na matriz? Verifique se todos os objetos armazenados na matriz implementam o protocolo NSCODing.