我有一个简单的费用跟踪器应用程序,在顶部有一个Segmented控件来更改货币(罗马尼亚货币,欧元和$按此顺序)。在我的列表管理器中,我有从一个转换到另一个的方法,并且在视图控制器中,基于Segmented控件,我相应地调用它们。NSUserDefaults与SegmentedControl混合
我的问题是以下几点:当应用程序启动时,选定的货币始终是第一个Ro货币。如果我添加了一些元素,然后我选择了另一种货币退出应用程序,我想NSUserDefaults会与这些值同步。当我再次打开该应用程序时,Ro货币再次被选中,但具有$ /欧元值。 (比如说我加了410 ron,换算成〜100美元,我选择了$并从多任务中杀死了应用程序,当我再次打开它时,它显示100 ron,而不是410)。如果选择一种货币并添加一定数量,它就可以正常工作(如果选择了$并且我加100,当我切换到ron它显示410)。我想我必须改变同步的内容,但我无法弄清楚在哪里以及如何。
EDIT2:一些代码(对不起)
//这是费用类 进口的UIKit
类消费:NSObject的,NSCoding {
//MARK: Properties
var title:String?
var amount:Double?
init(title:String,amount:Double){
self.title = title
self.amount = amount
}
override init(){
super.init()
}
required init(coder aDecoder: NSCoder){
if let titleDecoded = aDecoder.decodeObjectForKey("title") as? String{
title = titleDecoded
}
if let amountDecoded = aDecoder.decodeObjectForKey("amount") as? Double{
amount = amountDecoded
}
}
func encodeWithCoder(aCoder: NSCoder) {
if let titleEncoded = title {
aCoder.encodeObject(titleEncoded, forKey:"title")
}
if let amountEncoded = amount {
aCoder.encodeObject(amountEncoded, forKey:"amount")
}
}
}
// NSUserDefaultsManager import UIKit
类NSUserDefaultsManager:NSObject的{ 静态令userDefaults = NSUserDefaults.standardUserDefaults()
class func synchronize(){
let myData = NSKeyedArchiver.archivedDataWithRootObject(ExpenseManager.expenses)
NSUserDefaults.standardUserDefaults().setObject(myData, forKey: "expensearray")
NSUserDefaults.standardUserDefaults().synchronize()
}
class func initializeDefaults(){
if let expensesRaw = NSUserDefaults.standardUserDefaults().dataForKey("expensearray"){
if let expenses = NSKeyedUnarchiver.unarchiveObjectWithData(expensesRaw) as? [Expense]{
ExpenseManager.expenses = expenses
}
}
}
}
我打电话的实现代码如下经理initializeDefaults鉴于没有负荷,鉴于同步并出现在App Delegate模块,在applicationWillTerminate中同步。
ANSWER
我找到了解决办法 - 这是很明显的。我在Matt Neuburg的Google Books - iOS 9 Programming Fundamentals中找到它。而在viewDidLoad中我加入
: 在分段控制动作添加以下
令C = self.currencySelector.selectedSegmentIndex NSUserDefaults.standardUserDefaults()的setObject( “selectedcurrency” C,forKey)。
let c = NSUserDefaults.standardUserDefaults()。objectForKey(“selectedcurrency”)as! Int currencySelector.selectedSegmentIndex = c
对于这类问题,你可能需要显示一些代码。展示如何读取NSUserDefaults以及如何填充值(或至少其中一些)。 –
请勿张贴图片,张贴代码。没有人愿意提供帮助,因此愿意重新输入代码以在Playground中进行测试。 – vadian