我最近遇到website,其中博主建议不要使用 NSUserDefaults 在viewControllers之间传递数据,这是我一直使用的方法。
这就是我使用NSUserDefaults来存储应用程序的用户设置值的方法。
1 - 我在我的主ViewController中做的第一件事是为我的所有键添加常量变量,以便能够全局读取它们。
let kOne= "keyOne"
let kTwo = "keyTwo"
class ViewController: UIViewController{
//code...
}
2 - 在 AppDelegate.swift 中,我在 didFinishLaunchingWithOptions 方法中初始化了所有关键值。
// set default values for NSUserdefaults keys
NSUserDefaults.standardUserDefaults().registerDefaults([ kOne : "0", kTwo:"0" ])
3 - 然后在我的ViewController中读取值。
func keyOneFromDisc()->Double{
let keyOneValue:String = NSUserDefaults.standardUserDefaults().stringForKey(kOne)!
return Double(keyOneValue)!
}
// do something with the value...
4 - 在 SettingsViewController 中,我再次阅读并保存NSUserDefaults。
func keyOneFromDisc()->Double{
let keyOneValue:String = NSUserDefaults.standardUserDefaults().stringForKey(kOne)!
return Double(keyOneValue)!
}
// more functions...
// save my settings
@IBAction func saveSettings(sender: AnyObject) {
NSUserDefaults.standardUserDefaults().setObject(someValueFromAnInputField.text, forKey: kOne)
// more keys
}
我这是一个不好的做法吗?
实现上述目标的更好方法是什么?
编辑:对于这种困惑感到抱歉,我忘了提到我其实
需要坚持我传递的数据。我传递数据时使用prepareForSegue
不需要保留。
答案 0 :(得分:2)
您可以使用public class MyListener {
private static final Logger log = Logger.getLogger(MyListener.class.getName());
public MyListener() {
}
@PostPersist
@PostUpdate
@PostRemove
public void onPostPersist(MyClass object) {
log.fine("Firing changed entity event");
}
}
存储较少量的数据,例如登录目的或BOOL标志等。但每次无法存储数据以进行ViewController的转换。
为此目的,您可以使用
NSUSerdefault
答案 1 :(得分:1)
NSUserDefault用于在应用程序执行之间保留数据。问题是何时数据将被保存(如果我没记错的话)。
我这样做的方式是通过共享的模型对象为兄弟VC,或通过关系&当存在父/子视图控制器时,VC之间的委派。
答案 2 :(得分:-2)
最好在prepareForSegue方法中在控制器和传输数据中创建变量。但如果这个数据是一个且仅适用于整个应用程序 - 您只需将其存储在AppDelegate中即可。它可以从您应用的任何位置读取和保存这些数据。