#objective-c #plist #settings.bundle #setting
#objective-c #plist #settings.bundle #настройка
Вопрос:
Я только начинаю работать с файлами настроек, и у меня сразу же возникли проблемы при редактировании root.plist в моем пакете настроек. Мой XCode 4 выходит из строя каждый раз, когда я добавляю свойство в список, редактируя его как список свойств. Поэтому я подумал, что просто отредактирую как исходный код. Кажется, это намного проще.
Но когда я запускаю программу, root.plist не читается. (Он отлично работал с пакетом настроек из демонстрационной программы. Я использую InAppSettingsKit.) Я посмотрел на root.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>PreferenceSpecifiers</key>
<array>
<!-- Databases -->
<dict>
<key>Title</key> <string>Databases</string>
<key>Type</key> <string>PSGroupSpecifier</string>
</dict>
<dict>
<key>Type</key> <string>PSToggleSwitchSpecifier</string>
<key>Title</key> <string>db0</string>
<key>Key</key> <string>db0_preference</string>
<key>DefaultValue</key> <true/>
</dict>
<dict>
<key>Type</key> <string>PSToggleSwitchSpecifier</string>
<key>Title</key> <string>db1</string>
<key>Key</key> <string>db1_preference</string>
<key>DefaultValue</key> <true/>
</dict>
<!-- Sharing Actions -->
<dict>
<key>Type</key> <string>PSGroupSpecifier</string>
<key>Title</key> <string>Sharing Actions</string>
</dict>
<dict>
<key>Type</key> <string>PSToggleSwitchSpecifier</string>
<key>Title</key> <string>Facebook</string>
<key>Key</key> <string>facebook_preference</string>
<key>DefaultValue</key> <true/>
</dict>
<dict>
<key>Type</key> <string>PSToggleSwitchSpecifier</string>
<key>Title</key> <string>Twitter</string>
<key>Key</key> <string>twitter_preference</string>
<key>DefaultValue</key> <true/>
</dict>
<dict>
<key>Type</key> <string>PSToggleSwitchSpecifier</string>
<key>Title</key> <string>Email</string>
<key>Key</key> <string>email_preference</string>
<key>DefaultValue</key> <true/>
</dict>
<dict>
<key>Type</key> <string>PSToggleSwitchSpecifier</string>
<key>Title</key> <string>BlogSpot</string>
<key>Key</key> <string>blogspot_preference</string>
<key>DefaultValue</key> <true/>
</dict>
<!-- Automatic Email Enable -->
<dict>
<key>Type</key> <string>PSGroupSpecifier</string>
<key>Title</key> <string>Automatic Emailing</string>
</dict>
<dict>
<key>Type</key> <string>PSToggleSwitchSpecifier</string>
<key>Title</key> <string>Always Send to Email</string>
<key>Key</key> <string>autoblogspot_preference</string>
<key>DefaultValue</key> <true/>
</dict>
<!-- Calendar -->
<dict>
<key>Type</key> <string>PSRadioGroupSpecifier</string>
<key>Title</key> <string>First Day of the Week</string>
<key>Key</key> <string>firstDayOfTheWeek_preference</string>
<key>Values</key>
<array>
<integer>0</integer>
<integer>1</integer>
<integer>2</integer>
<integer>3</integer>
<integer>4</integer>
<integer>5</integer>
<integer>6</integer>
</array>
<key>Titles</key>
<array>
<string>Sunday</string>
<string>Monday</string>
<string>Tuesday</string>
<string>Wednesday</string>
<string>Thursday</string>
<string>Friday</string>
<string>Saturday</string>
</array>
</dict>
<dict>
<key>
</array>
<key>StringsTable</key>
<string>Root</string>
</dict>
</plist>
Ответ №1:
В самом конце списка у вас есть висячий ключ и тег dict .
Строки #90 и # 91.
</dict>
<dict>
<key>
</array>
<key>StringsTable</key>
<string>Root</string>
</dict>
</plist>
Должно быть что-то вроде:
</dict>
<dict />
</array>
<key>StringsTable</key>
<string>Root</string>
</dict>
</plist>
или
</dict>
<dict>
<key>key</key><string>string</string>
</dict>
</array>
<key>StringsTable</key>
<string>Root</string>
</dict>
</plist>
Я обнаружил это с помощью TextMate. Пакеты -> Список свойств -> Проверка синтаксиса. Не сообщает вам точную проблему, но приводит вас к области.
Вы также можете получить строку # для просмотра, попытавшись открыть список в приложении «Редактор списка свойств» (/Developer/Applications/Utilities/ Property List Editor.app)
Plists — это XML, поэтому любой валидатор XML обнаружит серьезные проблемы в вашем синтаксисе. Эмпирическое правило, однако, заключается в том, что для каждого тега вам нужен закрывающий тег. Для каждого ключа вам нужно значение. Пустых тегов <tag />
не должно быть <tag></tag>
.
Комментарии:
1. Спасибо. Я только что понял, что могу получить проверку XML в режиме онлайн. Он показал то же самое. Так что это была не какая-то таинственная вещь XCode.