1

我一直在尝试为我的应用程序设置设置,但即使我一遍又一遍地查看它并将其与书中的示例和 Craig Dunn 博客上的示例进行比较,我似乎无法使其正常工作。

我知道语法必须是完美的,而且这个文件非常简单,目前我只是想显示一个文本字段。我确实在一个全新的项目中短暂地完成了这项工作,但是从那以后我一直没有设法让它工作。

这是我的 Root.plist 文件的 XML:

<?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>Root</key>
<dict>
    <key>PreferenceSpecifiers</key>
    <array>
        <dict>
            <key>Title</key>
            <string>Group Name</string>
            <key>Type</key>
            <string>PSGroupSpecifier</string>
        </dict>
        <dict>
            <key>AutocapitalizationType</key>
            <string>None</string>
            <key>AutocorrectionType</key>
            <string>No</string>
            <key>Key</key>
            <string>usernameTextField</string>
            <key>Title</key>
            <string>Username</string>
            <key>Type</key>
            <string>PSTextFieldSpecifier</string>
        </dict>
    </array>
</dict>
</dict>
</plist>

正如我所说,我已经看过很多次了,我看不出它有任何问题。文件构建操作设置为内容,复制到输出目录设置为始终复制。我使用的 MonoTouch 版本是 6.0.7。

我将不胜感激有关此问题的任何帮助。谢谢

4

2 回答 2

5
  1. 确保 Settings.bundle 目录包含在项目的顶层。顶级,我的意思是在文件系统上,Settings.bundle 目录应该与您的 ProjectName.csproj 文件位于同一目录中。在 MonoDevelop 中,它将显示为项目节点下的顶级文件夹之一。

  2. 将 Root.plist 构建操作设置为 BundleResource(不要启用“复制到输出目录”。提示:如果您发现自己设置了“复制到输出目录”,请不要这样做 - 这几乎总是错误的做法 - 我们'实际上已经讨论过完全删除该选项。)

现在,对于 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>
        <dict>
            <key>Type</key>
            <string>PSGroupSpecifier</string>
            <key>Title</key>
            <string>Group Name</string>
        </dict>
        <dict>
            <key>Type</key>
            <string>PSTextFieldSpecifier</string>
            <key>Title</key>
            <string>Username</string>
            <key>AutocapitalizationType</key>
            <string>None</string>
            <key>AutocorrectionType</key>
            <string>No</string>
            <key>KeyboardType</key>
            <string>Alphabet</string>
            <key>IsSecure</key>
            <false/>
            <key>Key</key>
            <string>usernameTextField</string>
            <key>DefaultValue</key>
            <string></string>
        </dict>
    </array>
    <key>StringsTable</key>
    <string>Root</string>
</dict>
</plist>

查看您的 Root.plist 文件,似乎 PreferenceSpecifiers 键不在顶级 dict 节点中(它必须在)。换句话说:

删除文件顶部的以下行:

<dict>
<key>Root</key>

...以及文件末尾的以下行之一:

</dict>

应该这样做...

现在......说了这么多,我最近在尝试将设置添加到我的个人项目时自己发现了这一点,并决定我们在 Xamarin 需要让这更容易。我已经在即将发布的 MonoDevelop 3.1 中修复了一些小问题,但我希望有时间将 Settings.bundle 的模板添加到 MonoDevelop 的“添加新文件”向导中。我还想像 Info.plist 和 Entitlements.plist 一样添加 plist 键/值提示,以便 MonoDevelop 的 plist 编辑器在编辑这些 plist 文件时可以更好地指导您。

于 2012-12-08T16:04:42.373 回答
0

对于初学者,您缺少结束 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>
      <dict>
          <key>Type</key>
          <string>PSToggleSwitchSpecifier</string>
          <key>Title</key>
          <string>Stay Signed-In</string>
          <key>Key</key>
          <string>staySignedIn</string>
          <key>DefaultValue</key>
          <true/>
      </dict>
    </array>
</dict>
</plist>

我希望这有帮助。

于 2012-12-07T17:18:08.650 回答