我有一个使用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()
方法调用之后,仍将重置默认值。
答案 0 :(得分:1)
您的问题是RegisterDefaults
并没有按照您的想象做:
注册域的内容未写入磁盘;您需要在每次启动应用程序时调用此方法。
如果您要为持久化的默认值建立初始值,那么您将需要在set
方法中为每个操作单独执行SetDefaults
操作,而不是使用RegisterDefaults