美文网首页
自定义对象数组解归档存储的plist文件

自定义对象数组解归档存储的plist文件

作者: 3a169b0787bc | 来源:发表于2016-05-16 19:13 被阅读597次

今天做到缓存通讯目录的缓存,通讯录里包括部门和人员,都对应的是一个相应的model,它是一个自定义的类型。所有就考虑用解归档的方法来存储。直接上代码吧。
//首先是自定义的类要遵循NSCoding协议
- (void)encodeWithCoder:(NSCoder *)aCoder { [aCoder encodeFloat:self.originX forKey:@"originX"]; [aCoder encodeObject:self.name forKey:@"name"]; [aCoder encodeBool:self.isDepartment forKey:@"isDepartment"]; } -(id)initWithCoder:(NSCoder *)aDecoder { self = [super init]; if(self) { self.originX = [aDecoder decodeFloatForKey: @"originX"]; self.name = [aDecoder decodeObjectForKey:@"name"]; self.isDepartment = [aDecoder decodeBoolForKey:@"isDepartment"] ; } return self; }
//然后就是要把解归档的内容和plist文件做操作
- (void)loadRootContactData { NSData * resultdata = [[NSData alloc] initWithContentsOfFile:[self getPlistFilePath]]; NSKeyedUnarchiver *unArchiver = [[NSKeyedUnarchiver alloc] initForReadingWithData:resultdata]; self.dataArray = [unArchiver decodeObjectForKey:@"contactList"]; }
- (void)saveRootContactData { NSMutableData *data = [[NSMutableData alloc] init] ; NSKeyedArchiver *archiver = [[NSKeyedArchiver alloc] initForWritingWithMutableData:data] ; [archiver encodeObject:self.dataArray forKey:@"contactList"]; [archiver finishEncoding]; BOOL success = [data writeToFile:[self getPlistFilePath] atomically:YES]; }
这里有需要注意的是存入的根级目录应该是NSDictionary或者NSArray。plist文件里的根级目录中只能是他们。我在调试中就试过直接存NSString,然后是无法实现的。[self getPlistFilePath]是获取路径是一个plist文件的路径。 然后这里的key要注意,消息被覆盖,然后存取应该一致。

或者存入用户偏好里,其实没太差差别,只是用户偏好一般保存应用程序的配置信息
NSData *encodedSingleObj = [NSKeyedArchiver archivedDataWithRootObject:self.dataArray]; NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; [defaults setObject:self.dataArray forKey:@"xxx"]; NSData *prevSavedData = [defaults objectForKey:@"xxx"]; self.dataArray = (NSArray *)[NSKeyedUnarchiver unarchiveObjectWithData:prevSavedData];
另外也可以直接快速存储。(这个直接Root和前面的区别在哪?查官方文档也没看出什么)。
[NSKeyedArchiver archiveRootObject:array toFile:fileName]; NSMutableArray * array = [NSKeyedUnarchiver unarchiveObjectWithFile:fileName];

相关文章

  • 自定义对象数组解归档存储的plist文件

    今天做到缓存通讯目录的缓存,通讯录里包括部门和人员,都对应的是一个相应的model,它是一个自定义的类型。所有就考...

  • iOS数据存储

    iOS开发中数据存储有两类:一、存储为文件 如归档、解归档、plist文件存储及偏好设置都是存储为文件二、存储到...

  • IOS数据存储常用方式(二)NSKeyedArchiver

    特点:可以存储自定义模型对象NSKeyedArchiver归档相对较plist存储而言,它可以直接存储自定义模型对...

  • iOS 归档、解档之缓存自定义模型

    不管是NSUserDefaults 或者是 plist都不能对自定义的对象进行存储, 这里可以利用OC提供的解归档...

  • iOS开发之数据存储

    一、数据存储的几种方式 NSUserDefaults Plist文件 解归档 沙盒 SQLite CoreData...

  • 浅谈iOS本地存储

    iOS本地存储方式有很多种,比如:NSUserDefault,Plist文件存储,CoreData,解档与归档,沙...

  • ios 序列化

    归档是iOS开发中数据存储常用的技巧,归档可以直接将对象储存成文件,把文件读取成对象。相对于plist或者user...

  • iOS存储自定义对象

    使用MJExtension进行自定义对象解档归档达到存储自定义对象的功能 UserInfoModel.h在模型的....

  • 归档 存储数据

    归档一般都是保存自定义对象的时候,使用归档.因为plist文件不能够保存自定义对象. 如果一个字段当中保存有自定义...

  • 归档 存储数据

    归档一般都是保存自定义对象的时候,使用归档.因为plist文件不能够保存自定义对象.如果一个字段当中保存有自定义对...

网友评论

      本文标题:自定义对象数组解归档存储的plist文件

      本文链接:https://www.haomeiwen.com/subject/xkibrttx.html