Reputation: 623
I get this error in Xcode (swift):
Could not cast value of type 'NSTaggedPointerString' (0x1a1264378) to 'NSNumber' (0x1a126f900).
I made it clear where the error is with //ERROR: ("...")
Code:
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()
}
}
}
Upvotes: 3
Views: 5461
Reputation: 285039
You are saving a String
to NSUserDefaults
and then you are reading a NSNumber
. That's not possible and that's what the error message says.
NSUserDefaults
has dedicated methods to handle integers
Set:
Swift 1 and 2:
defaults.setInteger(2, forKey: "GetMute")
Swift 3:
defaults.set(2, forKey: "GetMute")
defaults.synchronize()
is generally not needed.
Get:
Swift 1 and 2:
welkmute = defaults.integerForKey("GetMute")
Swift 3:
welkmute = defaults.integer(forKey:"GetMute")
Two notes:
valueForKey
in NSUserDefaults
for objects. It's objectForKey
.Int
rather than NSInteger
).Upvotes: 1