gpt4 book ai didi

c# - NSUserDefaults 不保存 StandardUserDefaults 值

转载 作者:行者123 更新时间:2023-11-28 23:45:23 25 4
gpt4 key购买 nike

我有一个使用 Microsoft 的 Xamarin 开发的 iOS 应用程序,这就是为什么其中一些代码看起来可能有所不同的原因。无论如何,这就是我要做的:

在我的应用程序中,我有一组默认用户设置,无论如何都需要在应用程序的每个实例中使用。这是使用此方法设置的:

    public static void SetDefaults()
{
var keys = new object[]
{
"LastNotificationTime",
"LastSyncTime",
"LunchStartTime",
"LunchEndTime",
"OnLunchBreak",
"PunchedIn",
"PunchTime",
"ShowDetailPane",
"NotifyEmergency",
"RunAtBoot",
"RowsPerPage",
"SyncInterval"
};
var values = new object[]
{
"",
"",
"",
"",
false,
false,
"",
true,
true,
false,
5,
60
};
var defaults = NSDictionary.FromObjectsAndKeys(values, keys);
NSUserDefaults.StandardUserDefaults.RegisterDefaults(defaults);
NSUserDefaults.StandardUserDefaults.Synchronize();
}

这在我的应用程序的初始运行期间非常有效。我将从头开始在我的设备上部署,运行应用程序,然后停止。然后我将重新部署已安装的应用程序。我不想每次都清除默认值并设置真正的默认值,所以我在这样做之前执行此检查(在此示例中,Settings.GetPreferences() 返回 NSUserDefaults .StandardUserDefaults 对象):

    if( Settings.GetPreferences().IntForKey("RowsPerPage") == 0 || 
Settings.GetPreferences().IntForKey("RowsPerPage") == null )
{
Settings.SetDefaults();
}

正如您在上面看到的,RowsPerPage 最初设置为 5。我希望在后续初始安装后的每次运行中,该值都保持为 5。或者用户选择的任何值。

但是,上面的检查结果总是正确的,并且调用了我的 SetDefaults() 方法,清除了用户在上次运行期间对其默认值所做的任何更改。有谁知道为什么会这样?设置这些默认值时我做错了什么吗?即使在添加了不推荐的、已弃用的 NSUserDefaults.StandardUserDefaults.Synchronize() 方法调用之后,默认值仍会重置。

最佳答案

你的问题是 RegisterDefaults 没有按照你的想法去做:

来自documentation

The contents of the registration domain are not written to disk; you need to call this method each time your application starts.

如果你想为你的默认设置建立初始值,那么你需要在你的 SetDefaults 方法中为每个单独的 set 操作,而不是使用 注册默认值

关于c# - NSUserDefaults 不保存 StandardUserDefaults 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52729041/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com