美文网首页
自定义对象数组解归档存储的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文件

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