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

Ios 试图获取NSUserDefaults密钥时,发生崩溃,ios,swift,nsuserdefaults,Ios,Swift,Nsuserdefaults,我在这里不知所措,我需要能够检查NSUserDefaults是否返回nil,如果返回nil,则给它一个默认值。如果不行,我需要能够从NSUserDefaults加载最新的阵列,但我的应用程序不断崩溃,我不知道为什么 if NSUserDefaults.standardUserDefaults().objectForKey("imageDataArray") != nil { arrayOfImages = userDefaults.objectForKey("imageDataA

我在这里不知所措,我需要能够检查NSUserDefaults是否返回nil,如果返回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_指令崩溃

谢谢

您的第一个比较应该是==nil。 我不确定您是否可以将UIImage保存到NSUserDefault。 我想你可能也会更迅速一点

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()        
}

斯威夫特更关心键入那个objc。你正在向阵列施法。试着这样做。我猜你希望arrayOfImages是UIImage的数组

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

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

 let imageData = UIImagePNGRepresentation(image)
要转换回图像,请执行以下操作:

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

顺便说一下,这就是注册用户默认值的用途。未写入磁盘且仅在未提供实际值时提供的值。与Objective-C不同,您不需要在Swift中同步。第一行中的指令看起来正确。它应该可以正常运行