NSUserDefaults 不保存 StandardUserDefaults 值
NSUserDefaults not saving StandardUserDefaults values
我有一个使用 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()
returns NSUserDefaults.StandardUserDefaults
对象) :
if( Settings.GetPreferences().IntForKey("RowsPerPage") == 0 ||
Settings.GetPreferences().IntForKey("RowsPerPage") == null )
{
Settings.SetDefaults();
}
正如您在上面看到的,RowsPerPage 最初设置为 5。我希望在后续初始安装后的每个 运行 中,这个值都保持为 5。或者用户选择的任何值,因为那很重要。
然而,上面的检查总是结果为真,我的 SetDefaults()
方法被调用,清除了用户在最后 运行 期间对其默认值所做的任何更改。有谁知道为什么会这样?设置这些默认值时我做错了什么吗?即使添加了不推荐的、已弃用的 NSUserDefaults.StandardUserDefaults.Synchronize()
方法调用,默认值仍会重置。
您的问题是 RegisterDefaults
与您认为的不一样:
The contents of the registration domain are not written to disk; you need to call this method each time your application starts.
如果您想为持续存在的默认值建立初始值,那么您将需要对 SetDefaults
方法中的每个值进行单独的 set
操作,而不是使用 RegisterDefaults
我有一个使用 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()
returns NSUserDefaults.StandardUserDefaults
对象) :
if( Settings.GetPreferences().IntForKey("RowsPerPage") == 0 ||
Settings.GetPreferences().IntForKey("RowsPerPage") == null )
{
Settings.SetDefaults();
}
正如您在上面看到的,RowsPerPage 最初设置为 5。我希望在后续初始安装后的每个 运行 中,这个值都保持为 5。或者用户选择的任何值,因为那很重要。
然而,上面的检查总是结果为真,我的 SetDefaults()
方法被调用,清除了用户在最后 运行 期间对其默认值所做的任何更改。有谁知道为什么会这样?设置这些默认值时我做错了什么吗?即使添加了不推荐的、已弃用的 NSUserDefaults.StandardUserDefaults.Synchronize()
方法调用,默认值仍会重置。
您的问题是 RegisterDefaults
与您认为的不一样:
The contents of the registration domain are not written to disk; you need to call this method each time your application starts.
如果您想为持续存在的默认值建立初始值,那么您将需要对 SetDefaults
方法中的每个值进行单独的 set
操作,而不是使用 RegisterDefaults