作者热门文章
- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
我有一个struct
,有时,对于某些用户来说,在尝试访问该类型的变量时会发生崩溃。
struct AppSettings {
var mute:Bool {
didSet {
if mute != oldValue {
let savedSettings = NSUserDefaults.standardUserDefaults()
savedSettings.setBool(mute, forKey: KEY_SETTING_MUTE)
}
}
}
init() {
let savedSettings = NSUserDefaults.standardUserDefaults()
if let savedMute = savedSettings.objectForKey(KEY_SETTING_MUTE) as? Bool {
mute = savedMute
} else {
mute = false
}
}
}
var appSettings = AppSettings()
在应用程序启动期间的某个地方有时会崩溃
if appSettings.mute { // This will sometimes cause a crash
} // in AppDelegate or the methods it calls
这仅适用于某些用户,我似乎无法复制它。不能重现它是最糟糕的,因为它让我无事可做。
搜索 unsafe mutable addressor
作为错误没有帮助,因为几乎没有结果。
最佳答案
我认为您的解决方案设计过度,难以理解或调试。几年来,我一直在我的应用程序中使用类似的解决方案来管理 session 状态,并希望与您分享。您可以从这里直接提出并实现并且没有任何问题。
我在 Session 原则上工作,这意味着我希望存储和读取的值通过一个可靠的 Session 类并且没有错误的余地。
下面是如何在应用程序的任何地方使用它。
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
// how to set the value to be stored in userdefaults
Session.HasMuted = true
// two example of how to read the value
if Session.HasMuted == true {
print("has muted")
}
if Session.HasMuted == false {
print("has not muted")
}
}
这是 session 类
class Session {
class var HasMuted: Bool {
get {
guard let HasMuted = UserDefaults.standard.object(forKey: SessionSpace.HasMuted) as? Bool else {
return false
}
return HasMuted
}
set {
UserDefaults.standard.set(newValue, forKey: SessionSpace.HasMuted)
}
}
}
和伴随的 session 空间结构
struct SessionSpace {
static let HasMuted = "HasMuted"
}
我会考虑调整它以适应您的风格,我不太喜欢用大写字母来表示键字符串等,这是一个更优雅的可读性、实现和忘记的解决方案。您可以通过在 session 空间 block 中添加一个 setter/getter block 和 key 字符串来扩展它,并在几秒钟内从应用程序的任何地方再次使用,因为它是无故障且健壮的。如果您需要更多帮助,请告诉我。希望您采用它并将其保存到片段中。
关于swift - 不安全的可变寻址器崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43279166/
我正在尝试提供即时转码的视频。不幸的是,这意味着寻求不起作用。我假设这是因为浏览器不知道视频有多长,因此无法正确显示搜索栏。 有谁知道是否可以对视频的时长进行硬编码? 我想到的另一个选择可能是创建我自
我是一名优秀的程序员,十分优秀!