NSUserDefaults搞乱SegmentedControl

时间:2016-03-05 18:03:51

标签: ios swift nsuserdefaults

我有一个简单的费用跟踪器应用程序,顶部有一个分段控件来更改货币(罗马尼亚货币,欧元和此订单中的$)。在我的列表管理器中,我有从一个转换为另一个的方法,在视图控制器中,基于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

1 个答案:

答案 0 :(得分:0)

抱歉,我没有足够的声誉发表评论。但是你可以展示代码吗?我猜你没有同步某些东西或只是没有在ViewDidLoad等中提取它。