我有一个用Swift(iOS 8)编写的应用程序,它在第一次打开时,可以带你进入iOS主设置面板中的设置。它使用此代码:
UIApplication.sharedApplication().openURL(NSURL(string:UIApplicationOpenSettingsURLString)!)
这样可以正常工作,但到达时设置面板为空。如果您点击“设置”后退按钮,然后返回到应用程序的设置,则会显示所有选项。
我认为这与nsuserdefaults在用户实际访问设置面板之前似乎不存在的问题有关。
无论如何,有没有人知道如何解决这个问题?
注意:
1)仅在应用最初安装后的首次启动时发生。一旦访问了设置面板至少一次,它就可以正常工作。
2)我的应用已经检查是否存在初始默认值;如果缺少,它会为当前会话初始化所有设置,并将它们写入设置包 - 我已经通过将其中一个默认值从true翻转为false来验证此部分正在工作,并注意到在第一次查看时它是错误的设置。
答案 0 :(得分:3)
经过进一步的研究和几个小时的摆弄,我不再有问题了。我认为这是两件事之一,#2最有可能是IMO:
将初始化从我的模型类移到我的AppDelegate。 (尽管验证我的模型类正在成功初始化首选项;我还是喜欢从AppDelegate中完成它。)
确保在安装新应用程序之前强行退出设置应用程序(使用向上滑动手势)。
即使做了#1,我也会随机看到这种行为,我认为这与设置应用程序本身有关。我看到的另一个行为是SETTINGS下安装的应用程序列表实际上重复了 - 如果我强制退出它,这将会消失。所以我的猜测是我应该在安装之间强制退出设置。
答案 1 :(得分:0)
根据您的说明,不确定如何设置默认值。您可以尝试以这种方式设置它们。
var defaults: NSUserDefaults = NSUserDefaults.standardUserDefaults()
let setValue = "yoururl"
defaults.setObject(setValue, forKey: "url")
defaults.synchronize()
要在设置之前查看值中的内容,只需在var line之后添加此行。然后在defaults.synchronize()之后添加它以查看设置的内容。
println(defaults.objectForKey:@"url")
您也可以尝试使用脚本在构建过程中设置它们。
答案 2 :(得分:0)
您应该在应用程序启动时使用默认值注册您的用户默认值,以便创建值(如果它们不存在)。例如:
var itemDefaults = Dictionary<String,NSNumber>()
itemDefaults["myKey"] = NSNumber(int: 1)
let userDefaults = NSUserDefaults.standardUserDefaults()
userDefaults.registerDefaults(itemDefaults)