假设我有一个名为Lop
的班级。然后我想将它的实例保存到某些数组中的用户默认值,并且还从该数组中检索对象。
我在该类中创建了NSCoding
方法,现在尝试编写保存/检索的函数并且很难:
添加例如:
func addLop(newlop:ALop)
{
//get defaults array(already archived)
let lops = NSUserDefaults.standardUserDefaults().objectForKey("lops")
//add a new lop class, archived, to the user defaults array
let data = NSKeyedArchiver.archivedDataWithRootObject(newlop)
lops?.addObject(data)
NSUserDefaults.standardUserDefaults().setObject(lops, forKey: "lops")
}
我真的不知道是否有效,因为我无法处理的检索功能:
func getLops()->Array<Any>
{
//get defaults array(archived)
let lops = NSUserDefaults.standardUserDefaults().objectForKey("lops")
//here i should loop over this array of archived classes ,
then turn all of them into original unarchived classes and return
}
1.如何编写一个返回未归档类数组的函数?
答案 0 :(得分:0)
NSKeyedUnarchiver.unarchiveObjectWithData(lops[i] as! NSData)
NSData
,然后检查data.isEqual(lops[i])
与您已存储在{{NSData
中的每个已归档NSData
的相等性(通过调用NSUserDetaults
) 1}}。 其他方法是从NSUserDefaults
取消归档每个已存储的对象并检查ALop
对象的相等性。您必须在bool isEqual(other : NSObject)
类中实现ALop
方法,并在其中比较两个对象的所有属性,例如
bool isEqual(other : NSObject)
{
let otherALop = other as? Alop
if otherALop == nil {return false }
if otherALop == self { return true }
bool result = true
result = result && (self.property == otherALop!.property)
// ... for all properties repeat previous line
return result
}
请注意,NSUserDefaults
仅限于存储不超过64 KB,并且不用于存储模型层数据对象,只能存储应用程序的首选项。