Pergunta

Eu como a capacidade plist serialização para pequenas coleções de objetos: é simples, o armazenamento é XML, etc. Mas acho definir valores em dicionários pesado:

[myDict setObject:keepThis forKey:@"ivar"];

Eu prefiro muito mais para uso objeto derivado de classes (ou mesmo apenas estruturas):

myObj.ivar = keepThis

... e, em seguida, enviar uma mensagem para uma coleção para obter um plist. As classes / estruturas utilizadas para este fim pode ser restrito para que eles mapeiam diretamente e facilmente para primitivas plist; por exemplo myObj poderia ser mapeado para um NSDictionary e uma exigência poderia ser colocado em ivars tal forma que eles são uma das primitivas plist.

Tem alguém já construiu uma facilidade para isso, ou devo fazer a minha própria?

Foi útil?

Solução 5

Eu vi esse postou em outros lugares, mas é exatamente o que eu estava procurando. As respostas acima apontam para os ingredientes crus, mas aqui está ele, tudo embrulhado-up: http: // retaincount.com/blog/?p=7

Outras dicas

Eu não tenho certeza que este é exatamente o que você está falando, mas Valor da chave de Codificação vai, entre muitas outras coisas, deixá-lo obter um dicionário com valores a partir de dados de uma instância , e também dados de instância conjunto de um dicionário.

Há também uma maneira de pedir uma instância para uma lista de seus atributos , porém verifica-se que você tem que escrever um código si mesmo para fazer esse trabalho. (Você, poderia, no entanto, usar o runtime introspecção para implementar isso, se você queria) EDIT 2 Janeiro de 2011:. -[NSObject attributeKeys] não aparece mais na documentação do iOS. Eu editei o link para apontar para a documentação Mac, mas esteja ciente de que isso só pode ser uma opção nessa plataforma.

(A protocolo NSCoding é outra maneira de deixar sua loja de objetos / restaurar-se, mas o armazenamento é binário, não XML, e você ainda são responsáveis ??pela obtenção / colocando cada valor que se preocupam quando perguntado pelo sistema para fazê-lo. )

Você pode querer verificar este SO pergunta que discute colocando ivars de uma instância em um dicionário em tempo de execução.

Um projeto interessante. O Objectivo-C 2.0 Guia de Programação tem uma seção sobre as funções de tempo de execução para dinamicamente obter uma lista de propriedades de uma classe:

objc_property_t *class_copyPropertyList(Class cls, unsigned int *outCount)

Com isso, ele deve ser muito fácil escrever uma categoria em NSObject com um método que obtém a lista de propriedades e coloca-los em um dicionário.

Para usar propriedades para isso, você precisa ter um conjunto predefinido de chaves possíveis. Você não pode usar nomes arbitrários com o dot-sintaxe - que tinha que ser uma propriedade conhecida ou de assessor do primeiro operando. Portanto, não pode haver uma forma genérica deste. Mas se você fizer uma de sua preferência, se transformando em um dicionário é tão simples como fazer [self dictionaryWithValuesForKeys:listOfProperties].

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