3 回答
TA贡献1866条经验 获得超5个赞
NSUserDefaultsNSCodingNSArray, NSDictionary, NSString, NSData, NSNumberNSDateNSUserDefaults.
NSDataNSDataNSUserDefaultsNSArrayNSData
NSDataBC_Person
- (void)savePersonArrayData:(BC_Person *)personObject {
[mutableDataArray addObject:personObject];
NSMutableArray *archiveArray = [NSMutableArray arrayWithCapacity:mutableDataArray.count];
for (BC_Person *personObject in mutableDataArray) {
NSData *personEncodedObject = [NSKeyedArchiver archivedDataWithRootObject:personObject];
[archiveArray addObject:personEncodedObject];
}
NSUserDefaults *userData = [NSUserDefaults standardUserDefaults];
[userData setObject:archiveArray forKey:@"personDataArray"];}TA贡献1943条经验 获得超7个赞
BC_Person is a non-property-list object
编辑NSUserDefaults
//: Playground - noun: a place where people can playimport Foundationclass Person: NSObject, NSCoding {
let surname: String
let firstname: String
required init(firstname:String, surname:String) {
self.firstname = firstname
self.surname = surname
super.init()
}
//MARK: - NSCoding -
required init(coder aDecoder: NSCoder) {
surname = aDecoder.decodeObjectForKey("surname") as! String
firstname = aDecoder.decodeObjectForKey("firstname") as! String
}
func encodeWithCoder(aCoder: NSCoder) {
aCoder.encodeObject(firstname, forKey: "firstname")
aCoder.encodeObject(surname, forKey: "surname")
}}//: ### Now lets define a function to convert our array to NSDatafunc archivePeople(people:[Person]) -> NSData {
let archivedObject = NSKeyedArchiver.archivedDataWithRootObject(people as NSArray)
return archivedObject}//: ### Create some peoplelet people = [Person(firstname: "johnny", surname:"appleseed"),Person(firstname:
"peter", surname: "mill")]//: ### Archive our people to NSDatalet peopleData = archivePeople(people)if let unarchivedPeople =
NSKeyedUnarchiver.unarchiveObjectWithData(peopleData) as? [Person] {
for person in unarchivedPeople {
print("\(person.firstname), you have been unarchived")
}} else {
print("Failed to unarchive people")}//: ### Lets try use NSUserDefaultslet UserDefaultsPeopleKey =
"peoplekey"func savePeople(people:[Person]) {
let archivedObject = archivePeople(people)
let defaults = NSUserDefaults.standardUserDefaults()
defaults.setObject(archivedObject, forKey: UserDefaultsPeopleKey)
defaults.synchronize()}func retrievePeople() -> [Person]? {
if let unarchivedObject = NSUserDefaults.standardUserDefaults().objectForKey(UserDefaultsPeopleKey) as? NSData {
return NSKeyedUnarchiver.unarchiveObjectWithData(unarchivedObject) as? [Person]
}
return nil}if let retrievedPeople = retrievePeople() {
for person in retrievedPeople {
print("\(person.firstname), you have been unarchived")
}} else {
print("Writing to UserDefaults is still broken in playgrounds")}TA贡献1816条经验 获得超4个赞
NSUserDefaults *currentDefaults = [NSUserDefaults standardUserDefaults];NSData *data = [NSKeyedArchiver archivedDataWithRootObject:yourObject]; [currentDefaults setObject:data forKey:@"yourKeyName"];
NSData *data = [currentDefaults objectForKey:@"yourKeyName"];yourObjectType * token = [NSKeyedUnarchiver unarchiveObjectWithData:data];
[currentDefaults removeObjectForKey:@"yourKeyName"];
- 3 回答
- 0 关注
- 346 浏览
添加回答
举报
