Я пытаюсь сохранить строковый массив, используя NSUserDefaults с быстрым. Я искал вокруг и считаю, что я должен использовать [NSString] не [String], однако приложение по-прежнему падает с ошибкойКак сохранить массив строк с помощью NSUserDefaults в swift
fatal error: unexpectedly found nil while unwrapping an Optional value
Я не могу видеть, что я делаю не так, как это работает прекрасно Интс экономии и строки. Вот мой код для моих данных singleton и 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()
}
}
}
На какой линии происходит ошибка? – jtbandes
Хорошо. Поэтому я думаю, что проблема заключается не в реализации NSUserDefaults, а в доступе к значениям в другом месте приложения. Это сделало бы мою жизнь намного легче, если бы я мог инициализировать массив в контейнере данных, а не делать его необязательным. Есть ли способ сделать эту работу? – Matt