2016-03-05 76 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中拉動它,等等。