2016-07-06 50 views
3

我得到在Xcode(SWIFT)这个错误:斯威夫特错误:无法投类型的值 'NSTaggedPointerString'(0x1a1264378)到 '的NSNumber'(0x1a126f900)

Could not cast value of type 'NSTaggedPointerString' (0x1a1264378) to 'NSNumber' (0x1a126f900).

我清楚错误所在用//错误:( “...”)

代码:

import UIKit 
import iAd 
import AVFoundation 
import AudioToolbox 

let MAX : UInt32 = 4 
let MIN : UInt32 = 1 

class ViewController: UIViewController, ADBannerViewDelegate { 


    var chances = 10 
    var won = 0 
    var highscore = 0 
    var random = Int(arc4random_uniform(MAX) + MIN) 
    var sound = 1022 //sound if you won 
    var sound2 = 1105 //sound if reset 
    var sound3 = 1321 //sound if lose 
    var welkmute = 1 //mute = 1 and unmute = 2 

    @IBOutlet weak var timeswon: UILabel! 
    @IBOutlet weak var Banner: ADBannerView! 
    @IBOutlet weak var Highscores: UILabel! 
    @IBOutlet weak var mute: UIButton! 
    @IBOutlet weak var unmute: UIButton! 
    @IBOutlet weak var chancesleft: UILabel! 




    func unmUte() { 
    unmute.setTitleColor(UIColor.redColor(), forState: UIControlState()) 
    mute.setTitleColor(UIColor.blueColor(), forState: UIControlState()) 

    } 

    func mUte() { 
    mute.setTitleColor(UIColor.redColor(), forState: UIControlState()) 
    unmute.setTitleColor(UIColor.blueColor(), forState: UIControlState()) 
    } 


    override func prefersStatusBarHidden() -> Bool { 
    return true 
    } 

    @IBAction func Mute(sender: AnyObject) { 
    sound = 4095 
    sound2 = 4095 
    sound3 = 4095 
    mUte() 

    defaults.setObject("1", forKey: "GetMute") 
    defaults.synchronize() 

    } 

    @IBAction func Unmute(sender: AnyObject) { 
    sound = 1022 
    sound2 = 1105 
    sound3 = 1321 
    unmUte() 

    defaults.setObject("2", forKey: "GetMute") 
    defaults.synchronize() 

    } 

    override func viewDidLoad() { 
    super.viewDidLoad() 

    //unmUte() 

    Banner.hidden = true 
    Banner.delegate = self 
    self.canDisplayBannerAds = true 


    if defaults.valueForKey("GetHighScore") != nil { 
     highscore = defaults.valueForKey("GetHighScore") as! NSInteger 
    } 

    Highscores.text = "Highscore: \(highscore)" 



    if defaults.valueForKey("GetMute") != nil { 
     welkmute = defaults.valueForKey("GetMute") as! NSInteger //ERROR: (Thread 1: breakpoint 3.1) 

     if welkmute == 1 { 
      mUte() 
     } 

     if welkmute == 2 { 
      unmUte() 

     } 
    } 
} 

回答

1

您要保存StringNSUserDefaults,然后你正在阅读一个NSNumber。这是不可能的,这就是错误信息所说的。

NSUserDefaults有专门的方法来处理整数

集:

  • 夫特1和2:

    defaults.setInteger(2, forKey: "GetMute") 
    
  • 夫特3:

    defaults.set(2, forKey: "GetMute") 
    

    defaults.synchronize()一般不需要。

得到:

  • 夫特1和2:

    welkmute = defaults.integerForKey("GetMute") 
    
  • 夫特3:

    welkmute = defaults.integer(forKey:"GetMute") 
    

两个附注:

  • 永远不要在对象的NSUserDefaults中使用valueForKey。这是objectForKey
  • 只要有可能,请使用Swift本机类型(Int而不是NSInteger)。
+0

但请注意,'defaults.setInteger'将在Swift 3中消失(它将被推断,但你不能明确地调用它)。 – matt

+0

谢谢,@matt,我更新了答案 – vadian

+0

谢谢你帮助我。 –

相关问题