在Swift中将带有Class的NSMutableArray保存到Plist文件中

时间:2015-07-25 17:10:23

标签: ios swift nsmutablearray plist

嘿,我只想用Class保存我的NSMutableArray。但是当我尝试阅读文件时,我的应用程序正在粉碎。我找到了this,我试图转换为NSMutableArray。现在我无法弄清楚我能做些什么。

我的班级:

class Customer {
    var name = String()
    var email = String()
    var phoneNumber = Int()
    var bAdd = String()
    var bAdd2 = String()
    var sAdd = String()
    var sAdd2 = String()

    init(name: String, email: String, phoneNumber: Int, bAdd: String, bAdd2: String, sAdd: String, sAdd2: String) {
        self.name = name
        self.email = email
        self.phoneNumber = phoneNumber
        self.bAdd = bAdd
        self.bAdd2 = bAdd2
        self.sAdd = sAdd
        self.sAdd2 = sAdd2
    }

    class func exists (path: String) -> Bool {
        return NSFileManager().fileExistsAtPath(path)
    }

    class func read (path: String) -> NSMutableArray? {
        if Customer.exists(path) {
            return NSMutableArray(contentsOfFile: path)!
        }
        return nil
    }

    class func write (path: String, content: NSMutableArray) -> Bool {
        return content.writeToFile(path, atomically: true)
    }
}

我的阵列:

var ItemData:NSMutableArray = NSMutableArray()

和我的阅读代码:

 let documents = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true)[0] as! String
 let customerPath = documents.stringByAppendingPathComponent("Test.plist")

    ItemData = Customer.read(customerPath)!

当我试图阅读im gettin时,这次崩溃:

  

致命错误:在展开Optional值时意外发现nil       (LLDB)

任何建议?

1 个答案:

答案 0 :(得分:0)

你的代码完全正常,除了你实际上没有任何东西可以从头开始读取,因此Customer.read(customerPath)返回nil,你试图解包 - 因此错误。

如果你事先写一些东西,然后再尝试再读一遍,那么一切正常。

ItemData.addObject("aisnd")
Customer.write(customerPath, content: ItemData)
ItemData = Customer.read(customerPath)!

当然,这并不是实际做到这一点的方法,因为在开始时你没有任何东西是正常的。因此,您必须检查read函数是否实际返回有用的内容:

var ItemData:NSMutableArray = NSMutableArray()
if let item = Customer.read(customerPath) {
    ItemData = item
} else {
    print("no value found")
}

最后的注释1因为游乐场建议:从!移除as! String。最后的注释2:不要将变量名称设为大写,变量应该被称为itemData

修改
要编写Customer个对象,您必须执行this之类的操作。