2016-07-06 34 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

謝謝你幫助我。 –

相關問題