文档章节

iOS开发??保存自定义对象数组、字典到文件

hanbing94
 hanbing94
发布于 2016/02/27 12:42
字数 308
阅读 21
收藏 1

iOS开发??保存自定义对象数组、字典到文件

2014-11-25 22:26

在ios中,要保存普通的数组到文件可以直接调用-wirteToFile:atomically:方法写入,并且可以通过NSArray的方法-initWithContentOfFile:来读文件初始化数组。然而,当要保存的数组中存储的数据对象是自定义对象时,就得通过对象归档的方法来实现了,具体来说


一、自定义对象实现归档协议,并实现方法- (id)initWithCoder:和方法- (void)encodeWithCoder:

@interface CourseModel : CYZBaseModel <NSCoding>


- (id)initWithCoder:(NSCoder *)aDecoder
{
    self = [super init];
    if (self) {
        self.courseName = [aDecoder decodeObjectForKey:@"courseName"];
        self.courseTeacher = [aDecoder decodeObjectForKey:@"courseTeacher"];
        self.courseTime = [aDecoder decodeObjectForKey:@"courseTime"];
        self.courseLocation = [aDecoder decodeObjectForKey:@"courseLocation"];
        self.shouldUseTip = [aDecoder decodeBoolForKey:@"shouldUseTip"];
        self.row = [aDecoder decodeIntegerForKey:@"row"];
        self.section = [aDecoder decodeIntegerForKey:@"section"];
    }
    return self;
}

- (void)encodeWithCoder:(NSCoder *)aCoder
{
    [aCoder encodeObject:self.courseName forKey:@"courseName"];
    [aCoder encodeObject:self.courseTeacher forKey:@"courseTeacher"];
    [aCoder encodeObject:self.courseTime forKey:@"courseTime"];
    [aCoder encodeObject:self.courseLocation forKey:@"courseLocation"];
    [aCoder encodeBool:self.shouldUseTip forKey:@"shouldUseTip"];
    [aCoder encodeInteger:self.row forKey:@"row"];
    [aCoder encodeInteger:self.section forKey:@"section"];
}


二、获得保存文件的路径

- (NSString *)filePath
{
    return [[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0] stringByAppendingPathComponent:@"course.plist"];
}




三、调用NSKeyedArchived类的类方法:- (void)archiveRootObject:toFile:写入文件 

    NSString *path = [self filePath];
    [NSKeyedArchiver archiveRootObject:self.allCourses toFile:path];



四、调用NSKeyedUnarchiver类的类方法:- (id)unarchiveObjectWithFile:读文件

    NSString *path = [self filePath];
    self.allCourses = [NSKeyedUnarchiver unarchiveObjectWithFile:path];
    if (self.allCourses == nil) {
        self.allCourses = [NSMutableArray array];
    }


本文转载自:

hanbing94
粉丝 2
博文 68
码字总数 38602
作品 0
朝阳
私信 提问
浅谈iOS开发中的对象归档

iOS提供的数据持久化方式有:SQLiteCoreData属性列表、NSUserDefault对象归档。 这里来简单介绍下iOS开发中的对象归档: 对象归档是将对象归档以文件的形式保存到磁盘中(也称为序列化,持久化...

泊菜
2014/11/27
3.9K
8
iOS开发·runtime+KVC实现多层字典模型转换(多层数据:模型嵌套模型,模型嵌套数组,数组嵌套模型)

本文实验Demo传送门:DictToModelDemo 前言:将后台JSON数据中的字典转成本地的模型,我们一般选用部分优秀的第三方框架,如SBJSON、JSONKit、MJExtension、YYModel等。但是,一些简单的数据...

陈满iOS
2018/05/08
0
0
OC 知识:Foundation 框架及相关类详尽总结

本文用来介绍Foundation框架的相关知识,以及Foundation框架所提供类的相关知识总结。 1. 框架介绍 框架是由很多类、方法、函数和文档按照一定的逻辑组织起来的集合,以使开发程序变得更加容...

久依
02/21
0
0
iOS使用Objective-c自定义cordova插件(-)

本系列教程为博主初次使用开发,内容如有差错,欢迎指正,敬请谅解。 博客地址:http://blog.img421.com/iosshi-yong-object-czi-ding-yi-cordovacha-jian/ Mac安装ionic和cordova我们已经熟悉,...

Michaelyn
2017/10/23
0
0
Libgdx 1.6.1 发布,开源跨平台游戏开发框架

Libgdx 1.6.1 发布,更新内容如下: - Net.newServerSocket方法中添加可选的主机名,允许gdx开发的服务器程序进行特定的IP绑定。 - 更改iOS本地库的处理方式。从ios/build.gradle中移除updat...

宋志辉
2015/06/05
2.4K
12

没有更多内容

加载失败,请刷新页面

加载更多

多线程同时加载缓存实现

import com.google.common.cache.Cache;import com.google.common.cache.CacheBuilder;import java.util.concurrent.ExecutionException;import java.util.concurrent.ExecutorServi......

暗中观察
27分钟前
1
0
解决Windows和Ubuntu时间不一致的问题

解决Windows和Ubuntu时间不一致的问题 问题原因是使用的时间不一致导致的。win10直接从bios读出来的时间认为就是实际时间,ubuntu认为加上8个小时 后的才是。win10用的rtc ,ubuntu用的utc 在...

shzwork
29分钟前
2
0
mysql mysql三种插入数据语句和增删改方法

点开题目是不是有点懵X,因为你只知道insert...values这一种,重来没有听说过三种,现在来介绍一下。 插入数据三种方式: insert into 表名(字段名) values(插入值); 最常用的插入语句 inse...

edison_kwok
31分钟前
2
0
利用VisualVM 内存查看

准备工作,建几个测试类。等下就是要查看这几个类里面的属性 package visualvm;public class MultiObject { private String str; private int i; MultiObject(String str...

冷基
42分钟前
1
0
组装一台工作游戏两用机

一、配置清单如下: 分类 项目 价格(元) 主板 华硕(ASUS)TUF Z370-PLUS GAMING II 电竞特工 Z370二代 支持9代CPU 1049 CPU 英特尔(Intel) i7 8700K 酷睿六核 盒装CPU处理器 2640 风扇 九...

mbzhong
49分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部