Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/100.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios Swift-尝试使用nsUserDeafolts检索对象数组_Ios_Swift2_Xcode7 - Fatal编程技术网

Ios Swift-尝试使用nsUserDeafolts检索对象数组

Ios Swift-尝试使用nsUserDeafolts检索对象数组,ios,swift2,xcode7,Ios,Swift2,Xcode7,下面是关于在Swift 2和Xcode 7中使用NSUserDefault保存和检索数据的教程。但我在控制台中遇到了这个错误: 致命错误:在展开可选值时意外发现nil 我查了几篇关于这个的帖子: 1.- 2.- 我认为代码是好的,但是错误就在那里。这是我的控制台的屏幕截图 当我尝试在ViewController的蓝色函数中打印peopleArray时,会出现此错误。 这是我的ViewController: import UIKit class ViewController: UIViewCo

下面是关于在Swift 2和Xcode 7中使用NSUserDefault保存和检索数据的教程。但我在控制台中遇到了这个错误:

致命错误:在展开可选值时意外发现nil

我查了几篇关于这个的帖子: 1.- 2.- 我认为代码是好的,但是错误就在那里。这是我的控制台的屏幕截图 当我尝试在ViewController的蓝色函数中打印peopleArray时,会出现此错误。 这是我的ViewController:

import UIKit

class ViewController: UIViewController {

    @IBOutlet weak var favLbl: UILabel!

    var people = [Person]()
    let defaults = NSUserDefaults.standardUserDefaults()

    override func viewDidLoad() {
        super.viewDidLoad()

        if let color = defaults.valueForKey("color") as? String {
            favLbl.text = "Favorite Color: \(color)"
        } else {
            favLbl.text = "Pick a color!"
        }

        let personA = Person(first: "test1", last: "last1")
        let personB = Person(first: "test2", last: "last2")
        let personC = Person(first: "test3", last: "last3")

        people.append(personA)
        people.append(personB)
        people.append(personC)

        let peopleData = NSKeyedArchiver.archivedDataWithRootObject(people)
        defaults.setObject(peopleData, forKey: "people")
        defaults.synchronize()
    }

    @IBAction func red(sender: AnyObject) {
        favLbl.text = "Favorite Color: Red"
        defaults.setValue("Red", forKey: "color")
        defaults.synchronize()
    }

    @IBAction func yellow(sender: AnyObject) {
        favLbl.text = "Favorite Color: Yellow"
        defaults.setValue("Yellow", forKey: "color")
        defaults.synchronize()
    }

    @IBAction func blue(sender: AnyObject) {
        favLbl.text = "Favorite Color: Blue"
        defaults.setValue("Blue", forKey: "color")
        defaults.synchronize()

        // Fetch Data from NSUserDefault
        if let loadedPeople = defaults.objectForKey("people") as? NSData {
            if let peopleArray = NSKeyedUnarchiver.unarchiveObjectWithData(loadedPeople) as? [Person]
            {
                for person in peopleArray {
                    print(person.firstName)

                }
            }
        }
    }
}
这是我的人。斯威夫特:

import Foundation

class Person: NSObject, NSCoding {
    var firstName: String!
    var lastName: String!

    init(first: String, last: String) {
        firstName = first
        lastName = last
    }

    override init() {

    }

    required convenience init?(coder aDecoder: NSCoder) {
        self.init()
        self.firstName = aDecoder.decodeObjectForKey("firstname") as? String
        self.lastName = aDecoder.decodeObjectForKey("lastname") as? String
    }

    func encodeWithCoder(aCoder: NSCoder) {
        aCoder.encodeObject(self.firstName, forKey: "firstName")
        aCoder.encodeObject(self.lastName, forKey: "lastName")
    }
}

有什么想法吗?

至少有拼写错误
firstname
firstname
lastname
lastname
之比。你为什么在你的课堂上使用optionals和一个失败的初始值设定项?init方法通过非可选的。哦,天哪,我想我太累了,我已经编写了很长时间了。你说得对,这就是问题所在。谢谢@vadian说实话,我不知道老师为什么要使用可选项和失败初始值设定项。甚至我读到使用synchronize()方法不是一个好的实践,但我在一些帖子的代码中看到了它