2016-03-05 62 views
0

我有一个简单的费用跟踪器应用程序,在顶部有一个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

+0

对于这类问题,你可能需要显示一些代码。展示如何读取NSUserDefaults以及如何填充值(或至少其中一些)。 –

+2

请勿张贴图片,张贴代码。没有人愿意提供帮助,因此愿意重新输入代码以在Playground中进行测试。 – vadian

回答

0

抱歉,我没有足够的知名度评论。但是,你可以显示代码,我猜你没有同步某些东西,或者只是没有在ViewDidLoad中拉动它,等等。