這個問題的一個子問題/替代辦法的辦法,我試圖通過這個問題做:How can I use PListBuddy to copy an entry from one file to another?如何使用PlistBuddy將數組添加到Plist中?
我想通過一個Xcode複製從plist文件A到plist文件b。使用PlistBuddy條目構建腳本,使用Bash/Shell。通過這樣做,我不能使用PlistBuddy的「複製」功能。我必須複製每個單獨的條目以及它的所有元素,因爲您不能添加/設置字典,但必須通過「條目」與PlistBuddy進行交互。
我想要做的是拿Plist文件A並將它的標題/值數組存儲爲「PSMultiValueSpecifier」元素。我能夠抓住數組中的元素並將它們打印到屏幕上,但是當我將它們添加到目標Plist文件B中時,數組仍然是空的。
代碼:(代碼獲取中的條目添加)
# Configure the Entry
${PLISTBUDDY} -c "Add PreferenceSpecifiers:$DEST_INDEX dict" ${DEST_PLIST}
${PLISTBUDDY} -c "Add PreferenceSpecifiers:$DEST_INDEX:Type string 'PSMultiValueSpecifier'" ${DEST_PLIST}
# Retrieve the Additional Field Value
preferenceTitle=`$PLISTBUDDY -c "Print PreferenceSpecifiers:$SOURCE_INDEX:Title" $SOURCE_PLIST 2>&1`
preferenceKey=`$PLISTBUDDY -c "Print PreferenceSpecifiers:$SOURCE_INDEX:Key" $SOURCE_PLIST 2>&1`
preferenceDefaultValue=`$PLISTBUDDY -c "Print PreferenceSpecifiers:$SOURCE_INDEX:DefaultValue" $SOURCE_PLIST 2>&1`
preferenceValues=`$PLISTBUDDY -c "Print PreferenceSpecifiers:$SOURCE_INDEX:Values" $SOURCE_PLIST 2>&1`
preferenceTitles=`$PLISTBUDDY -c "Print PreferenceSpecifiers:$SOURCE_INDEX:Titles" $SOURCE_PLIST 2>&1`
代碼添加新條目:
# Set the Additional Field Values
${PLISTBUDDY} -c "Add PreferenceSpecifiers:$DEST_INDEX:Title string $preferenceTitle" ${DEST_PLIST}
${PLISTBUDDY} -c "Add PreferenceSpecifiers:$DEST_INDEX:Key string $preferenceKey" ${DEST_PLIST}
${PLISTBUDDY} -c "Add PreferenceSpecifiers:$DEST_INDEX:DefaultValue integer $preferenceDefaultValue" ${DEST_PLIST}
####BORKEN####
${PLISTBUDDY} -c "Add PreferenceSpecifiers:$DEST_INDEX:Values array $preferenceValues" ${DEST_PLIST}
${PLISTBUDDY} -c "Add PreferenceSpecifiers:$DEST_INDEX:Titles array $preferenceTitles" ${DEST_PLIST}
####BORKEN####
這裏是代碼片段產生以下數據:
echo "#########"
echo "[$THIS] adding $preference: $preferenceDict"
echo "#########"
echo "Source: "`$PLISTBUDDY -c "Print PreferenceSpecifiers:$SOURCE_INDEX:Values" $SOURCE_PLIST`
echo "Source: "`$PLISTBUDDY -c "Print PreferenceSpecifiers:$SOURCE_INDEX:Titles" $SOURCE_PLIST`
echo "#########"
echo "Destination: "`$PLISTBUDDY -c "Print PreferenceSpecifiers:$DEST_INDEX:Values" $DEST_PLIST`
echo "Destination: "`$PLISTBUDDY -c "Print PreferenceSpecifiers:$DEST_INDEX:Titles" $DEST_PLIST`
echo "#########"
這是提供的數據證明正在運輸的字段是
#########
[addDebugSettingsMenu.bash] adding : Dict {
Titles = Array {
Meters
Feet
}
DefaultValue = 1
Values = Array {
1
2
}
Key = UserPreferences_UnitsKey
Type = PSMultiValueSpecifier
Title = Units
}
#########
Source: Array { 1 2 }
Source: Array { Meters Feet }
#########
Destination: Array { }
Destination: Array { }
#########
如果您有任何關於PlistBuddy的未記錄功能的知識,請幫助。 MAN頁面非常纖細,例子很多。
我想感謝您閱讀本文,並藉此幫助我解決頸部疼痛。
可能有更好的方法來做到這一點,但我已經通過計算源數組中的元素然後單獨複製它們來解決此問題。 $ {PLISTBUDDY} -c 「添加PreferenceSpecifiers:$ DEST_INDEX:標題陣列」 $ {DEST_PLIST} $ {PLISTBUDDY} -c 「添加PreferenceSpecifiers:$ DEST_INDEX:標題:0字符串 'TITLE_1'」 $ {DEST_PLIST} 「$ {PLISTBUDDY} -c」添加PreferenceSpecifiers:$ DEST_INDEX:標題:1字符串'TITLE_2'「$ {DEST_PLIST} etc ... 我不能發佈這個答案,直到8小時或10聲望,所以我會評論它現在。 – jhthorp 2013-03-22 16:12:51