使用Xamarin,为什么我的应用程序设置默认为false?

时间:2014-01-17 20:38:58

标签: ios ipad xamarin.ios xamarin root.plist

我遇到了一个非常奇怪的问题。我已经为iPad应用程序创建了一个应用程序设置,由于某种原因,该设置默认为false,但只有在用户打开设置并观察实际设置之前。在被观察至少一次后,设置将始终返回正确的值,无论是真还是假(如果设置是量子粒子,它对我来说更有意义)。此行为仅发生在设备上,而不是在模拟器中。此外,当我在设备上以调试模式启动或通过TestFlight发布时,它是一致的。

我的设置在Root.plist中定义,该文件位于Settings.bundle文件夹中的客户端解决方案中。此文件中定义的所有其他设置都可以正常工作。

由于我无法真正展示Xamarin设计器,这是来自Root.plist的我的XML:

<dict>
    <key>Title</key>
    <string>Camera Settings</string>
    <key>Type</key>
    <string>PSGroupSpecifier</string>
</dict>
<dict>
    <key>DefaultValue</key>
    <true/>
    <key>Key</key>
    <string>useCameraForScanning</string>
    <key>Title</key>
    <string>Use Camera for Scanning</string>
    <key>Type</key>
    <string>PSToggleSwitchSpecifier</string>
</dict>

这是我的访问者代码:

private const string useCameraForScanningKey = "useCameraForScanning";
private static bool useCameraForScanning = true;
public static bool UseCameraForScanning
{
    get
    { 
        bool useCamera = NSUserDefaults.StandardUserDefaults.BoolForKey(useCameraForScanningKey);
        useCameraForScanning = useCamera;
        return useCameraForScanning; 
    }
    set { NSUserDefaults.StandardUserDefaults.SetBool(value, useCameraForScanningKey); }    
}

整个访问器中的断点证明该设置被检索为false。我对这个Root.plist业务很新,所以我猜我错过了一些明显的东西。

提前感谢您提供的任何帮助!

2 个答案:

答案 0 :(得分:2)

请注意,如果此密钥没有设置或者是第一次运行应用程序,则NSUserDefaults.BoolForKey会返回NOfalse。它解释了你的问题,至少就我理解的问题而言。


查看Apple documentation

boolForKey:

返回与指定键关联的布尔值。

  • (BOOL)boolForKey:(NSString *)defaultName

参数

defaultName:当前用户默认数据库中的一个键。

返回值

如果布尔值与用户默认值中的defaultName相关联,则返回该值。否则,将返回NO

答案 1 :(得分:0)

链接https://makeapppie.com/tag/root-plist/澄清了一点。

  

许多控件的属性默认值都不正确。这是设置应用中显示的值,而不是默认值的真实值。它将在第一次使用后显示值,但它用于显示目的而非价值目的。

这里的解决方案

public static bool? NullableBoolForKey(this NSUserDefaults defaults, string key)
{
    var value = defaults.ValueForKey(new NSString(key));
    return value == null ? (bool?)null : ((NSNumber)value).UInt32Value == 1;
}