首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >NSUserDefaults对SegmentedControl的干扰

NSUserDefaults对SegmentedControl的干扰
EN

Stack Overflow用户
提问于 2016-03-06 02:03:51
回答 1查看 63关注 0票数 0

我有一个简单的费用跟踪应用程序,在顶部有一个分段控制,以改变货币(罗马尼亚货币,欧元和美元在这个顺序)。在我的列表管理器中,我有从一个转换到另一个的方法,而在视图控制器中,基于分段的控件,我相应地调用它们。

我的问题是:当应用程序启动时,选择的货币始终是first - Ro货币。如果我添加了一些元素,然后选择了另一种货币退出应用程序,我猜NSUserDefaults会与这些值同步。当我再次打开应用程序时,Ro currency再次被选中,但带有美元/欧元的值。(假设我添加410RON,它转换为大约100美元。我选择$并从多任务处理中删除应用程序。当我再次打开它时,它显示100RON,而不是410)。如果选择了一种货币并添加了一定的金额,则执行ok (如果选择了$,则添加100,当我将控件切换到ron时,它会显示410)。我想我必须通过同步来改变一些东西,但是我不知道在哪里以及如何改变。

EDIT2:一些代码(抱歉)

//这是费用类导入UIKit

类费用: NSObject,NSCoding {

代码语言:javascript
复制
//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()

代码语言:javascript
复制
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

EN

回答 1

Stack Overflow用户

发布于 2016-03-06 02:15:35

对不起,我没有足够的名气来评论。但是你能展示代码吗,我猜你没有同步一些东西,或者只是没有在ViewDidLoad中拉出它,等等。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35817729

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档