我有一个简单的费用跟踪器应用程序,顶部有一个分段控件来更改货币(罗马尼亚货币,欧元和此订单中的$)。在我的列表管理器中,我有从一个转换为另一个的方法,在视图控制器中,基于Segmented控件,我相应地调用它们。
我的问题如下:当应用程序启动时,所选货币始终是第一个 - Ro货币。如果我添加一些元素,然后我选择了另一种货币退出应用程序,我猜NSUserDefaults会与这些值同步。当我再次打开应用程序时,再次选择Ro货币,但使用$ / euro值。 (假设我添加410 ron,转换为〜$ 100。我选择$并从多任务中杀死应用程序。当我再次打开它时,它显示100 ron,而不是410)。如果选择货币并添加一定数量,则执行正常(如果选择$并且我添加100,当我将控件切换到ron时它显示410)。我想我必须通过同步改变一些东西,但我无法弄清楚在哪里和如何。
EDIT2:一些代码(抱歉)
//这是费用类 导入UIKit
class Expense: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 导入UIKit
类NSUserDefaultsManager:NSObject { static let 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
}
}
}
}
我在tableview管理器中调用initializeDefaults在视图中加载,视图中的同步确实出现,在App Delegate模块中,在applicationWillTerminate中同步。
ANSWER
我找到了解决方案 - 很明显。我在Matt Neuburg的Google Books - iOS 9 Programming Fundamentals中找到了它。 在分段控制操作中,我添加了以下内容
让c = self.currencySelector.selectedSegmentIndex NSUserDefaults.standardUserDefaults()。setObject(c,forKey:" selectedcurrency")
在viewDidLoad中我添加了
让c = NSUserDefaults.standardUserDefaults()。objectForKey(" selectedcurrency")as!诠释 currencySelector.selectedSegmentIndex = c
答案 0 :(得分:0)