如何保存NSUserDefaults的使用在迅速字符串数组 [英] How to save an array of strings using NSUserDefaults in swift

查看:263
本文介绍了如何保存NSUserDefaults的使用在迅速字符串数组的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想保存使用与NSUserDefaults的迅速的字符串数组。我已搜查四周,相信我不得不使用[的NSString]不是[字符串]然而,应用程序仍然错误崩溃


  

致命错误:意外地发现零,同时展开一个可选值


我不明白我在做什么错了,因为这是工作完全正常储蓄整数和字符串。这里是我的code为我的数据单和NSUserDefaults的。

 结构DefaultsKeys
{
  静态让利的myString =的myString
  静态令敏=敏
  静态令myArray的=myArray的}类DataContainerSingleton
{
  静态令sharedDataContainer = DataContainerSingleton()
  VAR的myString:字符串?
  VAR敏:诠释?
  VAR myArray的:[的NSString]/ *我也尝试:
  变种myArray的:[的NSString] = [的NSString]()* /  VAR goToBackgroundObserver:AnyObject?  在里面()
  {
    让默认值= NSUserDefaults.standardUserDefaults()
    myString的= defaults.objectForKey(DefaultsKeys.myString)作为!串?
    敏= defaults.objectForKey(DefaultsKeys.myInt)作为!诠释?
    myArray的= defaults.objectForKey(DefaultsKeys.myArray)作为! [的NSString]    goToBackgroundObserver = NSNotificationCenter.defaultCenter()。addObserverForName(
      UIApplicationDidEnterBackgroundNotification时,
      对象:无,
      队列:无)
      {
        (注:NSNotification!) - GT;在无效
        让默认值= NSUserDefaults.standardUserDefaults()        defaults.setObject(self.myString,forKey:DefaultsKeys.my)
        defaults.setObject(self.myInt,forKey:DefaultsKeys.myInt)
        defaults.setObject(self.myArray,forKey:DefaultsKeys.myArray)
        defaults.synchronize()
    }
  }
}


解决方案

 <  - 语言:迅速 - >        //声明并启动阵列
        VAR sample_array:NSMutableArray里! = []
        //使用可变数组中添加数据        //变量来存储阵列中的价值
        VAR说:串! =你好        //在阵列中添加值
        sample_array.addObject(你好)
        //要么
        //sample_array.addObject(say)        / *
        //你也可以保存在数组这样的价值观
        VAR sample_array:数组<串GT; = []
        VAR说:串! =你好
        sample_array =QWERTY]
        sample_array.insert(比方说,atIndex:1)
        的println(sample_array)
        * /        //归档和保存数据
        让数据= NSKeyedArchiver.archivedDataWithRootObject(sample_array)
        。NSUserDefaults.standardUserDefaults()的setObject(数据,forKey:array_key)
        NSUserDefaults.standardUserDefaults()。同步()        //解压缩和获取数据
        如果让数据= NSUserDefaults.standardUserDefaults()。objectForKey(array_key)作为? {的NSD​​ata
        stopover_array = NSKeyedUnarchiver.unarchiveObjectWithData(数据)的NSMutableArray
            }

I am trying to save an string array using NSUserDefaults with swift. I have searched around and believe that i have to use [NSString] not [String] however the app still crashes with error

fatal error: unexpectedly found nil while unwrapping an Optional value

I can not see what i am doing wrong as it is working perfectly fine saving ints and strings. Here is my code for my data singleton and NSUserDefaults.

struct DefaultsKeys
{
  static let myString  = "myString"
  static let myInt  = "myInt"
  static let myArray = "myArray"

}



class DataContainerSingleton
{
  static let sharedDataContainer = DataContainerSingleton()


  var myString: String?
  var myInt: Int?
  var myArray:[NSString]?

/* I have also tried:
  var myArray:[NSString] = [NSString]() */



  var goToBackgroundObserver: AnyObject?

  init()
  {
    let defaults = NSUserDefaults.standardUserDefaults()


    myString = defaults.objectForKey(DefaultsKeys.myString) as! String?
    myInt = defaults.objectForKey(DefaultsKeys.myInt) as! Int?
    myArray = defaults.objectForKey(DefaultsKeys.myArray) as! [NSString]?



    goToBackgroundObserver = NSNotificationCenter.defaultCenter().addObserverForName(
      UIApplicationDidEnterBackgroundNotification,
      object: nil,
      queue: nil)
      {
        (note: NSNotification!) -> Void in
        let defaults = NSUserDefaults.standardUserDefaults()

        defaults.setObject( self.myString, forKey: DefaultsKeys.my)
        defaults.setObject( self.myInt, forKey: DefaultsKeys.myInt)
        defaults.setObject( self.myArray, forKey: DefaultsKeys.myArray)


        defaults.synchronize()
    }
  }
}

解决方案

        <!-- language: swift -->

        //declare and initiate the array        
        var sample_array : NSMutableArray! = []
        //use mutable array to add data

        //variable to store value in array
        var say: String! =  "Hello"

        //add values in array
        sample_array.addObject("hello")
        //or
        //sample_array.addObject(say)

        /*
        //you can also save values in array like this
        var sample_array: Array<String> = []
        var say: String! =  "Hello"
        sample_array = ["Qwerty"]
        sample_array.insert(say, atIndex: 1)
        println(sample_array)
        */

        //archive and saving data 
        let data = NSKeyedArchiver.archivedDataWithRootObject(sample_array)
        NSUserDefaults.standardUserDefaults().setObject(data, forKey: "array_key")
        NSUserDefaults.standardUserDefaults().synchronize()

        //unarchive and getting data
        if let data = NSUserDefaults.standardUserDefaults().objectForKey("array_key") as? NSData {
        stopover_array = NSKeyedUnarchiver.unarchiveObjectWithData(data)  as NSMutableArray
            }

这篇关于如何保存NSUserDefaults的使用在迅速字符串数组的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆