2012-01-02 3 views
0

Ceci est une question de suivi de ce que j'avais demandé à propos de "Contenu de plist à NSString". Comment puis-je obtenir les connexions d'un NSString montré ci-dessous dans un fichier plist. Ce que j'ai lu jusqu'à présent par googling, c'est qu'il n'y a aucun moyen de le faire sans mettre NSString dans NSArray/NSdictonary. Mais le problème est que si j'ai un NSString avec le contenu montré ci-dessous.Contenu de NSString to plist

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> 
<plist version="1.0"> 
<dict> 
    <key>a.infoKey</key> 
    <array> 
     <string>a</string> 
     <string>a</string> 
     <string>a</string> 
     <string></string> 
    </array> 
    <key>a.titleKey</key> 
    <string>a</string> 
    <key>r.infoKey</key> 
    <array> 
     <string>r</string> 
     <string>r</string> 
     <string>r</string> 
     <string></string> 
    </array> 
    <key>r.titleKey</key> 
    <string>r</string> 
</dict> 
</plist> 

Si j'ajoute la chaîne ci-dessus à un NSArray puis créer un nouveau fichier plist, il semble foiré.

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> 
<plist version="1.0"> 
<array> 
    <string>&lt;?xml version="1.0" encoding="UTF-8"?&gt; 
&lt;!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"&gt; 
&lt;plist version="1.0"&gt; 
&lt;dict&gt; 
    &lt;key&gt;a.infoKey&lt;/key&gt; 
    &lt;array&gt; 
     &lt;string&gt;a&lt;/string&gt; 
     &lt;string&gt;a&lt;/string&gt; 
     &lt;string&gt;a&lt;/string&gt; 
     &lt;string&gt;&lt;/string&gt; 
    &lt;/array&gt; 
    &lt;key&gt;a.titleKey&lt;/key&gt; 
    &lt;string&gt;a&lt;/string&gt; 
    &lt;key&gt;r.infoKey&lt;/key&gt; 
    &lt;array&gt; 
     &lt;string&gt;r&lt;/string&gt; 
     &lt;string&gt;r&lt;/string&gt; 
     &lt;string&gt;r&lt;/string&gt; 
     &lt;string&gt;&lt;/string&gt; 
    &lt;/array&gt; 
    &lt;key&gt;r.titleKey&lt;/key&gt; 
    &lt;string&gt;r&lt;/string&gt; 
&lt;/dict&gt; 
&lt;/plist&gt; 
</string> 
</array> 
</plist> 

Je veux que la chaîne exacte (la plus haute) soit ajoutée à un nouveau fichier plist.

Répondre

1

La chaîne que vous avez déjà est un plist correctement formaté. Si vous mettez cette chaîne dans un autre objet, vous obtiendrez ce que vous voyez, qui est un plist-within-a-plist, ce qui n'est pas ce que vous voulez.

Donc ce que vous devez faire est simplement prendre votre chaîne et l'enregistrer directement dans un fichier. Il y a un certain nombre de façons de le faire, mais la façon la plus simple de le faire est d'utiliser la capacité intégrée de NSString s'écrire dans un fichier, comme ceci:

[myPlistString writeToFile:somePath atomically:YES encoding:NSUTF8StringEncoding error:NULL]; 

Notez que le type de codage doit être UTF8 . C'est ce qui est reflété dans l'en-tête de la chaîne de plist, donc c'est le type d'encodage que vous devriez utiliser. (Évidemment, utilisez également le paramètre error si vous le faites en code de production.)

Une fois enregistré dans un fichier (dans ce cas, somePath), vous ne dites pas ce que vous devez en faire, mais vous pouvez le charger directement dans une hiérarchie d'objets en utilisant la classe NSPropertyListSerialization.

1

Il suffit de l'enregistrer dans un fichier dans un fichier appelé [something].plist en utilisant -[NSString writeToFile:atomically:encoding:error:]

+0

Merci beaucoup. Cela a fonctionné bien que j'obtienne juste un avertissement sur compiler que writeToFile: atomically est déprécié pour NSString. Pourtant, cela fonctionne toujours. Merci encore. –

+0

@SamBudda: Utilisez les paramètres supplémentaires (codage et erreur) pour l'exactitude et pour éviter l'avertissement de dépréciation. –