2016-06-10 60 views
0

我試圖做到這一點,所以無論何時應用程序移動到背景或被殺死或無論什麼時候保存我的設置。
我想訪問並設置屬性「useLimits」遍佈我的應用程序。作爲共享實例的設置

爲什麼它不起作用?

有沒有更好的更優雅的方式來實現這一目標?

import UIKit 

class Settings: NSObject 
{ 

    static let sharedInstance = Settings() 

    private let kUseLimits = "kUseLimits" 

    var useLimits = false 

    override init() 
    { 
     super.init() 
     NSNotificationCenter.defaultCenter().addObserver(
      self, 
      selector: #selector(Settings.save), 
      name: UIApplicationWillResignActiveNotification, 
      object: nil) 
     let userdefaults = NSUserDefaults.standardUserDefaults() 
     self.useLimits = userdefaults.boolForKey(kUseLimits) 

    } 

    deinit 
    { 
     NSNotificationCenter.defaultCenter().removeObserver(self) 
     save() 
    } 

    func save() 
    { 
     let userdefaults = NSUserDefaults.standardUserDefaults() 
     userdefaults.setBool(self.useLimits, forKey: kUseLimits) 
     userdefaults.synchronize() 
    } 

    func reset() 
    { 
     self.useLimits = false 
     save() 
    } 

} 
+0

使用應用程序委託... – matt

回答

2

我覺得這樣的事情將是很好的:

class AppSettings { 
    private struct Keys { 
    static let useLimits = "AppSttings.useLimits" 
    } 

    static var useLimits: Bool { 
    set { 
     NSUserDefaults.standardUserDefaults().setBool(newValue, forKey: Keys.useLimits) 
    } 
    get { 
     return NSUserDefaults.standardUserDefaults().boolForKey(Keys.useLimits) 
    } 
    } 

    static func rest() { 
    useLimits = false 
    } 
} 

附:從iOS 8開始,您無需在NSUserDefault中撥打synchronize()

P.S.S. NSUserDefaults.standardUserDefaults().boolForKey(Keys.useLimits)將返回false如果沒有這樣的對象,如果您需要特定的默認值,請檢查對象或使用NSUserDefaults.standardUserDefaults().registerDefaults()

P.S.S.S.它不會影響你的表現了,所以你可以從UD讀,只是在裏面寫上運行,但如果你想太多性能的代碼,你可以做這樣的事情:

private static var _useLimits: Bool? 
static var useLimits: Bool { 
    set { 
    NSUserDefaults.standardUserDefaults().setBool(newValue, forKey: Keys.useLimits) 
    _useLimits = newValue 
    } 
    get { 
    if _useLimits == nil { 
     _useLimits = NSUserDefaults.standardUserDefaults().boolForKey(Keys.useLimits) 
    } 
    return _useLimits! 
    } 
} 

或更優雅的電流值:

private static var _useLimits: Bool = NSUserDefaults.standardUserDefaults().boolForKey(Keys.useLimits) 
static var useLimits: Bool { 
    set { 
    NSUserDefaults.standardUserDefaults().setBool(newValue, forKey: Keys.useLimits) 
    _useLimits = newValue 
    } 
    get { 
    return _useLimits 
    } 
}