Ich versuche, einen Wert in einem Array mit zu ändern plutil
, erhalte jedoch den Fehler
Failed to insert value new value 2 at key path PARENT.0.KEY_IN_ARRAY with error -[__NSCFConstantString characterAtIndex:]: Range or index out of bounds
Hier ist eine Beispielliste, um das Problem zu veranschaulichen:
<?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>SIMPLE</key>
<string>value1</string>
<key>PARENT</key>
<array>
<dict>
<key>KEY_IN_ARRAY</key>
<string>value2</string>
</dict>
<dict>
<key>KEY_IN_ARRAY</key>
<string>value3</string>
</dict>
</array>
</dict>
</plist>
Das Ändern des SIMPLE-Werts ist einfach:
$ plutil -extract SIMPLE xml1 -o - sample.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">
<string>value1</string>
</plist>
$ plutil -replace SIMPLE -string "new value 1" sample.plist
$ plutil -extract SIMPLE xml1 -o - sample.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">
<string>new value 1</string>
</plist>
Das Abrufen des Array-Werts funktioniert einwandfrei:
$ plutil -extract PARENT.0.KEY_IN_ARRAY xml1 -o - sample.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">
<string>value2</string>
</plist>
Ich erhalte jedoch die Fehlermeldung, wenn ich versuche, diesen Wert zu ändern:
$ plutil -replace PARENT.0.KEY_IN_ARRAY -string "new value 2" sample.plist
sample.plist: Could not modify plist, error: Failed to insert value new
value 2 at key path PARENT.0.KEY_IN_ARRAY with error -[__NSCFConstantString
characterAtIndex:]: Range or index out of bounds
command-line
plist
Gregmac
quelle
quelle
-extract
funktioniert und-insert
scheitert mit der erwarteten Beschwerde über den bereits vorhandenen Schlüssel; In der Zwischenzeit-replace
und-remove
schlagen Sie diese seltsamecharacterAtIndex:
Saitensache!Antworten:
Ich denke, PlistBuddy ist hier das empfohlene Tool:
Der Befehl ändert den Wert von KEY_IN_ARRAY im ersten Diktat von PARENT. Das im zweiten Diktat würde geändert werden mit:
Der Schalter -c führt den Befehl direkt aus. Die Datei darf keine Binärliste sein!
quelle