Objective c 将root.plist编辑为源代码会导致plist损坏

Objective c 将root.plist编辑为源代码会导致plist损坏,objective-c,plist,settings.bundle,setting,Objective C,Plist,Settings.bundle,Setting,我刚刚开始处理首选项文件,在编辑设置包中的root.plist时,我立即遇到了问题。每次我将一个属性添加到plist并将其编辑为属性列表时,我的XCode 4都会崩溃。所以我想我只需要编辑源代码。看起来容易多了 但是当我运行程序时,root.plist没有被读取。(它与演示程序中的设置包配合得很好。我使用的是InAppSettingsKit。)我在源代码编辑器中查看了root.plist,它看起来不错。我试着把它看作一个属性列表,结果发现一个错误,说plist已经损坏了 这是我名单上的内容。有人

我刚刚开始处理首选项文件,在编辑设置包中的root.plist时,我立即遇到了问题。每次我将一个属性添加到plist并将其编辑为属性列表时,我的XCode 4都会崩溃。所以我想我只需要编辑源代码。看起来容易多了

但是当我运行程序时,root.plist没有被读取。(它与演示程序中的设置包配合得很好。我使用的是InAppSettingsKit。)我在源代码编辑器中查看了root.plist,它看起来不错。我试着把它看作一个属性列表,结果发现一个错误,说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>

偏好说明符
标题数据库
类型PSGroupSpecifier
类型PSToggleSwitchSpecifier
标题db0
键db0_首选项
默认值
类型PSToggleSwitchSpecifier
标题db1
键db1_首选项
默认值
类型PSGroupSpecifier
所有权分享行动
类型PSToggleSwitchSpecifier
标题Facebook
关键facebook用户偏好
默认值
类型PSToggleSwitchSpecifier
标题推特
关键的推特用户偏好
默认值
类型PSToggleSwitchSpecifier
标题电子邮件
关键电子邮件地址设置
默认值
类型PSToggleSwitchSpecifier
标题博客点
关键点位置偏好
默认值
类型PSGroupSpecifier
标题自动电子邮件
类型PSToggleSwitchSpecifier
标题始终发送到电子邮件
钥匙自动定位点首选项
默认值
类型说明符
一周的第一天
星期一的关键第一天\u首选项
价值观
0
1.
2.
3.
4.
5.
6.
标题
星期日
星期一
星期二
星期三
星期四
星期五
星期六
StringsTable
根

在plist的最后,您有一个悬挂的键和dict标签

第90行和第91行


StringsTable
根
应该是这样的:

        </dict>
        <dict />
    </array>
    <key>StringsTable</key>
    <string>Root</string>
</dict>
</plist>

StringsTable
根


钥匙串
StringsTable
根
我是用TextMate发现的。捆绑包->属性列表->验证语法。不会告诉你确切的问题,但会让你了解这个地区

您还可以通过尝试在属性列表编辑器应用程序(/Developer/Applications/Utilities/Property List Editor.app)中打开plist来查看一行

Plists是XML,因此任何XML验证器都会在语法中发现主要问题。不过,经验法则是,对于每个需要关闭标记的标记。对于每个键,您都需要一个值。
空标签应该是
而不是

谢谢。我刚刚意识到我可以在线验证XML。它显示了同样的事情。所以这不是什么神秘的XCode。
        </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>