Objective-C Adicionar ao/editar arquivo .plista
-
19-09-2019 - |
Pergunta
WritEtofile: atomicamente, adiciona dados a um .plist existente? É possível modificar um valor em um .plista? O aplicativo deve ser recompilado para entrar em vigor a mudança?
Eu tenho uma lista .plista personalizada no meu aplicativo. A estrutura é como abaixo:
<array>
<dict>
<key>Title</key>
<string>MyTitle</string>
<key>Measurement</key>
<dict>
<key>prop1</key>
<real>28.86392</real>
<key>prop2</key>
<real>75.12451</real>
</dict>
<key>Distance</key>
<dict>
<key>prop3</key>
<real>37.49229</real>
<key>prop4</key>
<real>58.64502</real>
</dict>
</dict>
</array>
A tag de matriz contém vários itens com a mesma estrutura. Preciso adicionar itens ao .plista existente. Isso é possível? Eu posso escrever um uiview para fazer exatamente isso, se sim.
*EDIT - OK, eu apenas tentei WritEtofile, esperando que pelo menos tenha substituído se não fosse adicionar a ele. Estranhamente, o código a seguir seleciona caminho diferente ao ler e escrever.
NSString *rootPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0];
O arquivo .plista está no meu projeto. Eu posso ler disso. Quando escrevo para ele, ele está criando um arquivo .plista e salvando -o no meu /Users/.../library/! Isso faz sentido para alguém?
Solução
Eu assumiria que o plist
Isso vem com a aplicação é assumida read only
- Está dentro do pacote de aplicativos.
Quaisquer atualizações são armazenadas no diretório específico do usuário, para que todo usuário tenha suas próprias modificações específicas.
Outras dicas
É claro que você pode criar e escrever seu próprio arquivo .plista. Por NSArray *arrayPath=NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *userFile=[[arrayPath objectAtIndex:0] stringByAppendingString:@"/whatever.plist"];
, você pode escrever/editá -lo.
Mas também tenho a mesma pergunta: como edito o valor contra uma chave específica, em vez de substituir todo o arquivo .plista?
Por exemplo, se eu quiser alterar o valor "mytitle" para o título "título" em: <key>Title</key>
<string>MyTitle</string>
Para "girassol", como posso fazer isso com o código?