2014-12-19 23 views
2

这是代码,如果值(分数)超过旧值(maxscore),我试图将数据保存在plist中,但是我发现错误...从NSUserDefaults获取值时出错

func write() { var maxscore = NSUserDefaults.standardUserDefaults().objectForKey("chiave") as Int? 

    if let test = score { // ERROR    
     if maxscore < score { 
      maxscore = score 
     } 
    } 
    NSUserDefaults.standardUserDefaults().setObject(score, forKey: "chiave") 
    NSUserDefaults.standardUserDefaults().synchronize() 
} 

为Xcode的错误是

"bond value in a conditional binding must be optional type swift" 

编辑新的问题!我在比赛结束时写出了plist,并且我想在比赛开始时阅读plist,在scoreScore中显示maxScore ...但是我有一个新的错误,我会疯狂地解决它!

func write() { 

    var maxScore = NSUserDefaults.standardUserDefaults().objectForKey("chiave") as Int? 
     if maxScore < score { 
      maxScore = score 
    } 

    NSUserDefaults.standardUserDefaults().setObject(maxScore, forKey: "chiave") 
    NSUserDefaults.standardUserDefaults().synchronize() 
} 

func read() { 

    var maxScore = NSUserDefaults.standardUserDefaults().objectForKey("chiave") as Int? 

    println(maxScore) // CONSOLE RETURN -> "Optional(0)" 

    labelScore.text = String(maxScore) // ERROR "Could not find an overload for init that accept the supplied argument 
} 
+1

我真的不明白为什么这会被拒绝投票......这是一个合理的问题。 – Oxcug

+0

你的问题是关于plist文件的写法,你的解释是关于NSUserDefaults的。 – Mrunal

+0

我真的不明白,我是新的编码,我有一个示例项目,保存一个简单的字符串,它的工作完美,但这种方式编辑白整数,而不是字符串不工作在我的项目... –

回答

1

很肯定这一点:

var maxscore = NSUserDefaults.standardUserDefaults().objectForKey("chiave") as Int? 

应该是这样的:

var maxscore = NSUserDefaults.standardUserDefaults().objectForKey("chiave") as? Int 

此外,来自哪里了一下后score?看起来Swift抱怨是因为它不是可选的。如果是这样的话,你可以做到这一点,忘了if语句:

if maxscore < score { 
    maxscore = score 
} 

虽然,这并不真正使多大意义,因为你没有做任何事情后W是/ maxscore。我认为你的意思是这样的:

if maxscore < score { 
    score = maxscore 
} 

我会再次提到这一点,不要使用'作为Int?'使用“as”投射?诠释”。你不应该那样做。将您的阅读内容更改为:

if let score = NSUserDefaults.standardUserDefaults().objectForKey("chiave") as? Int { 
    labelScore.text = "\(score)" 
} 
+1

得分在viewcontroleller中声明。问题没有解决您的解决方案...在同一个地方相同的错误... –

+0

错误是因为分数是不是可选的,你可以显示它是如何宣布? – Logan

+0

var score:Int = 0 –