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!

Foi útil?

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:myNsArrayforKey:@"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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top