在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
一、Swift 3.0 1、model
class userModel: NSObject,NSCoding { var account: String = "" var regmobile: String = "" var sec1_question: String = "" func encode(with aCoder: NSCoder) { aCoder.encode(account, forKey:"account") aCoder.encode(regmobile, forKey:"regmobile") aCoder.encode(sec1_question, forKey:"sec1_question") aCoder.encode(expert_audit, forKey:"expert_audit") } required init?(coder aDecoder: NSCoder) { super.init() account = (aDecoder.decodeObject(forKey:"account")as? String)! status = (aDecoder.decodeObject(forKey:"status")as? String)! nickname = (aDecoder.decodeObject(forKey:"nickname")as? String)! } }
2、 归解档 // 路径: let userAccountPath = "\(NSSearchPathForDirectoriesInDomains(FileManager.SearchPathDirectory.documentDirectory, FileManager.SearchPathDomainMask.userDomainMask, true).first!)/southDream.data" //归档 NSKeyedArchiver.archiveRootObject(model, toFile: userAccountPath + "/userModel") //解档 if NSKeyedUnarchiver.unarchiveObject(withFile: userAccountPath) != nil { let model = NSKeyedUnarchiver.unarchiveObject(withFile: userAccountPath) as? userModel }
二、OC 四种数据持久化方式 http://www.cocoachina.com/ios/20160617/16739.html // //归档数据,并用二进制写入文件 NSMutableData *data = [NSMutableData data]; NSKeyedArchiver *keyedArchiver = [[NSKeyedArchiver alloc] initForWritingWithMutableData:data]; [keyedArchiver encodeObject:Users forKey:@"users"];//Users已知的保存用户信息的数组 [keyedArchiver finishEncoding]; [data writeToFile:@"归档数据保存路径" atomically:YES]; [objc] view plain copy print? //读取上面已经保存好的文件,并反归档后在程序中使用数据 NSData *newData = [NSData dataWithContentsOfFile:@"归档数据保存路径"]; NSKeyedUnarchiver *keyedUnArchiver = [[NSKeyedUnarchiver alloc] initForReadingWithData:newData]; NSArray *users = [keyedUnArchiver decodeObjectForKey:@"users"]; for (User *user in users) { NSLog(@"name = %@ pw = %@",u.name,u.password); } 注意:需要归档的数据中如果含有自定义的对象,那么该对象需遵守<NSCoding>协议,并重写如下方法: [objc] view plain copy print? - (void)encodeWithCoder:(NSCoder *)aCoder{ [aCoder encodeObject:对象属性 forKey:@"归档的key"]; } [objc] view plain copy print? - (id)initWithCoder:(NSCoder *)aDecoder{ self = [super init]; if (self) { 实例变量 = [aDecoder decodeObjectForKey:@"归档的key"]; } return self; }
//先把数据在model中归解档 。h
@property(nonatomic,copy)NSString *email; @property(nonatomic,copy)NSString *uid; @property(nonatomic,copy)NSString *mobile;
*is_sec_pwd; 。m
#import "UserModel.h" static UserModel *model; @implementation UserModel +(UserModel *)defaultCellModel{ static dispatch_once_t onceToken; dispatch_once(&onceToken, ^{ if (!model) { model = [[UserModel alloc]init]; } }); return model; } - (void)encodeWithCoder:(NSCoder *)aCoder{ [aCoder encodeObject:self.account forKey:@"account"]; [aCoder encodeObject:self.regmobile forKey:@"regmobile"]; [aCoder encodeObject:self.sec1_question forKey:@"sec1_question"]; } - (nullable instancetype)initWithCoder:(NSCoder *)aDecoder{ self = [super init]; if(self) { self.account = [aDecoder decodeObjectForKey:@"account"]; self.regmobile = [aDecoder decodeObjectForKey:@"regmobile"]; self.sec1_question = [aDecoder decodeObjectForKey:@"sec1_question"]; self.headimage = [aDecoder decodeObjectForKey:@"headimage"]; } return self; } @end
NSUserDefaults 保存 Model数据-》归档-》NSUserdefaults NSUserDefaults * defaults = [NSUserDefaults standardUserDefaults]; //不能直接存取NSObject,需要先归档转成NSData NSData *data = [NSKeyedArchiver archivedDataWithRootObject:model]; [defaults setObject:data forKey:@"model"]; NSUserdefaults-》解档-》Model数据 NSData *modeldata = [[NSUserDefaults standardUserDefaults]objectForKey:@"model"]; usermodel = [NSKeyedUnarchiver unarchiveObjectWithData:modeldata];
//文件中保存 #import "ViewController.h" #import "linePesist.h" //导入数据模型类 #define CodeString @"CodeString" @implementation ViewController -(NSString *)dataFile{ NSArray *ar = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask,YES); NSString *fielpath = [ar objectAtIndex:0]; return [fielpath stringByAppendingPathComponent:@ "data.archive" ]; //改修后缀名,以免与属性列表创建的文件重复,而加载成旧的的文件。 不用查字典了。。archive表归档 } - (void)viewDidLoad { [ super viewDidLoad]; NSString *filepath = [self dataFile]; NSLog(@ "%@" ,filepath); if ([[NSFileManager defaultManager]fileExistsAtPath:filepath]) { //创建2个实例 NSData *data = [[NSData alloc]initWithContentsOfFile:filepath]; NSKeyedUnarchiver *unarchiver = [[NSKeyedUnarchiver alloc]initForReadingWithData:data]; //把已归档的对象读取。赋值给linepesist linePesist *linepesist =[unarchiver decodeObjectForKey:CodeString]; [unarchiver finishDecoding]; //完成解档 for (int i = 0;i |
请发表评论