同步存储在NSUserDefaults中的数组?

时间:2014-10-23 01:47:42

标签: ios swift nsuserdefaults

我刚尝试在iPhone上安装了当前在应用商店中安装的版本的应用程序的更新版本。自上次更新以来,我添加了一些新功能,这似乎会导致应用程序崩溃。

基本上,我添加了一个新数组,用于存储以前版本中不存在的笔记数据,这些数据存储在NSUserDefaults中(不太理想,我知道,但我现在宁愿保持这种方式)

这是我在表格视图中的应用程序崩溃的代码:

cell.notesLabel.text = (notes.objectAtIndex(indexPath.row)) as? String

错误只是说明了 - "线程1:断点1.1"只要点击表格视图选项卡。

我正在与其他人讨论这个问题,他们建议我需要检查默认值中是否存在数组,如果缺少则创建并同步它。

我只编程了几个月,所以这对我来说并不意味着很多。但我想我只需要做这样的事情:

if NSUserDefaults.standardUserDefaults().arrayForKey("notes") == nil {
  //Do something?
}

我不确定他的同步意味着什么?有人有什么建议吗?

目前在viewWillAppear()我有这段代码:

    if var tempNames: NSArray = NSUserDefaults.standardUserDefaults().arrayForKey("names") {
        names = tempNames.mutableCopy() as NSMutableArray
    }
    if var tempDates: NSArray = NSUserDefaults.standardUserDefaults().arrayForKey("dates") {
        dates = tempDates.mutableCopy() as NSMutableArray
    }
    if var tempValues: NSArray = NSUserDefaults.standardUserDefaults().arrayForKey("values") {
        values = tempValues.mutableCopy() as NSMutableArray
    }
    if var tempImages: NSArray = NSUserDefaults.standardUserDefaults().arrayForKey("images") {
        images = tempImages.mutableCopy() as NSMutableArray
    }
    if var tempUnformatted: NSArray = NSUserDefaults.standardUserDefaults().arrayForKey("unformatted") {
        unformatted = tempUnformatted.mutableCopy() as NSMutableArray
    }
    if var tempNotes: NSArray = NSUserDefaults.standardUserDefaults().arrayForKey("notes") {
        notes = tempNotes.mutableCopy() as NSMutableArray
    }

编辑:

我尝试将代码更改为此,但我遇到了同样的问题:

    if NSUserDefaults.standardUserDefaults().arrayForKey("notes") != nil {
        var tempNotes: NSArray = NSUserDefaults.standardUserDefaults().arrayForKey("notes")!
        notes = tempNotes.mutableCopy() as NSMutableArray
    }

1 个答案:

答案 0 :(得分:1)

这是一个让你入门的片段。我把它检查到了操场上并且有效:

var defaults = NSUserDefaults.standardUserDefaults()

var array = ["Eggs", "Milk", "Bread"]

defaults.setObject(array, forKey: "notes")

var notes = [String]()

if NSUserDefaults.standardUserDefaults().arrayForKey("notes") != nil {

    notes = defaults.objectForKey("notes") as Array
}

您可以在测试时同步,但我怀疑您是否需要它用于发布版本:

NSUserDefaults.standardUserDefaults().synchronize();