我有一个简单的费用跟踪应用程序,在顶部有一个分段控制,以改变货币(罗马尼亚货币,欧元和美元在这个顺序)。在我的列表管理器中,我有从一个转换到另一个的方法,而在视图控制器中,基于分段的控件,我相应地调用它们。
我的问题是:当应用程序启动时,选择的货币始终是first - Ro货币。如果我添加了一些元素,然后选择了另一种货币退出应用程序,我猜NSUserDefaults会与这些值同步。当我再次打开应用程序时,Ro currency再次被选中,但带有美元/欧元的值。(假设我添加410RON,它转换为大约100美元。我选择$并从多任务处理中删除应用程序。当我再次打开它时,它显示100RON,而不是410)。如果选择了一种货币并添加了一定的金额,则执行ok (如果选择了$,则添加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导入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,视图中的synchronize确实出现了,在App Delegate模块中,sync in applicationWillTerminate也出现了。
回答
我找到了一个解决方案--这是很明显的。我在Matt Neuburg的Google Books - iOS 9编程基础中找到了它。在分段控制操作中,我添加了以下内容
设c= self.currencySelector.selectedSegmentIndex NSUserDefaults.standardUserDefaults().setObject(c,forKey:“self.currencySelector.selectedSegmentIndex_forKey”)
在viewDidLoad中,我添加了
让c= NSUserDefaults.standardUserDefaults().objectForKey("selectedcurrency") as!Int currencySelector.selectedSegmentIndex =c
发布于 2016-03-06 02:15:35
对不起,我没有足够的名气来评论。但是你能展示代码吗,我猜你没有同步一些东西,或者只是没有在ViewDidLoad中拉出它,等等。
https://stackoverflow.com/questions/35817729
复制相似问题