试图获取NSUserDefaults密钥,发生崩溃

时间:2015-01-28 20:20:49

标签: ios swift nsuserdefaults

我在这里不知所措,我需要能够检查NSUserDefaults是否返回nil,如果确实如此,请给它一个默认值。如果它不是我需要能够从NSUserDefaults加载最新的阵列,但我的应用程序继续崩溃,我不知道为什么。

if NSUserDefaults.standardUserDefaults().objectForKey("imageDataArray") != nil {
        arrayOfImages = userDefaults.objectForKey("imageDataArray") as Array
    }else {
        arrayOfImages = NSUserDefaults.standardUserDefaults().objectForKey("imageDataArray") as Array

        var image = UIImage(named: "padlock")!
        arrayOfImages.append(image)
        NSUserDefaults.standardUserDefaults().setObject(arrayOfImages, forKey: "imageDataArray")
        NSUserDefaults.standardUserDefaults().synchronize()

我在运行和第一行遇到EXC_BAD_INSTRUCTION错误

感谢。

3 个答案:

答案 0 :(得分:0)

  1. 您的第一次比较应为== nil
  2. 我不确定您是否可以将UIImage保存到NSUserDefaults
  3. 我认为你可能也喜欢对它更加迅速。

    if let arrayOfImages = NSUserDefaults.standardUserDefaults().objectForKey("imageDataArray") {
        var image = UIImage(named: "padlock")!
        arrayOfImages.append(image)
        NSUserDefaults.standardUserDefaults().setObject(arrayOfImages, forKey: "imageDataArray")
        NSUserDefaults.standardUserDefaults().synchronize()
    } else {
        // set your default value:
        NSUserDefaults.standardUserDefaults().setObject(Array(), forKey: "imageDataArray")
        NSUserDefaults.standardUserDefaults().synchronize()        
    }
    

答案 1 :(得分:0)

Swift更关心打字那个objc。您正在转换为Array。尝试这样做。我猜你想要arrayOfImages是一个UIImage数组。

if let arrayOfImages = NSUserDefaults.standardUserDefaults().arrayForKey("imageDataArray") as? [UIImage] {

答案 2 :(得分:0)

NSUserDefaults不接受直接插入UIIMage。在插入NSUserDefaults之前,您应该转换为NSData:

 let imageData = UIImagePNGRepresentation(image)

转换回图片:

var retrievedImage = UIImage(data: imageData) //return optional object