ios - 切换保存用户首选项
问题描述
我正在尝试在打开开关时使用 OneSignal 发送标签,并在再次关闭时发送删除标签的请求。
@IBAction func tagGeneral(_ sender: UISwitch) {
if (sender.isOn == true) {
OneSignal.sendTag("General", value: "value")
print("sendtag")
}
else {
OneSignal.deleteTag("General")
print("deletetag")
}
}
这是我使用的代码。似乎正在工作,但是当用户转到另一个页面时,开关会自动关闭......
我怎样才能解决这个问题?
解决方案
关于@Ryan 的评论,这是一个答案:
第一的。有很多方法可以保存用户偏好,我会用UserDefaults()
| 编辑您的按钮操作代码:
@IBAction func tagGeneral(_ sender: UISwitch) {
let userdef = UserDefaults.standard
if (sender.isOn == true) {
OneSignal.sendTag("General", value: "value")
print("sendtag")
// user made the choice
userdef.set(true, forKey: "sw_set")
} else {
OneSignal.deleteTag("General")
print("deletetag")
// reset
userdef.set(false, forKey: "sw_set")
}
}
通常,如果没有这个小功能,这将无法工作,请确保在您的viewDidAppear()
:
private func init_switch() {
// Thanks @Vadian for the tip
let userdef = UserDefaults.standard
self.yourSwitch.isOn = userdef.bool(forKey: "sw_set")
}
调用它viewDidAppear()
:
override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(true)
self.init_switch()
}
让我知道它是否有帮助。
推荐阅读
- c# - AutofacContrib.NSubstitute:升级到 AutoFac6 和 v6.2.2 后的 TypeLoadException
- reactjs - 成功部署仍然会导致默认页面
- python - 是否可以使用 try/except 语句结束 while 循环?
- java - 如何避免 scriptslauncher.bat: command not found error running Java in VS Code?
- c# - 如何将数据从控制器传递到 ASP.NET MVC 中的视图
- javascript - Javascript:在 forloop 期间或整个循环运行后是否更新内部 HTML?
- unit-testing - CMake:本机编译单元测试并为嵌入式目标交叉编译代码
- python - Google Drive Watch 资源 URI 返回 403
- python - 从具有条件的单独数据框中计算行数 - PySpark
- android - Android 语音识别器不再离线工作