iOS应用程序开发方法与实践 教学课件 ppt 作者 金福生 李朴之_ iOS应用程序开发方法与实践-第07章

上传人:E**** 文档编号:89541776 上传时间:2019-05-27 格式:PPTX 页数:22 大小:527.76KB
返回 下载 相关 举报
iOS应用程序开发方法与实践 教学课件 ppt 作者  金福生 李朴之_ iOS应用程序开发方法与实践-第07章_第1页
第1页 / 共22页
iOS应用程序开发方法与实践 教学课件 ppt 作者  金福生 李朴之_ iOS应用程序开发方法与实践-第07章_第2页
第2页 / 共22页
iOS应用程序开发方法与实践 教学课件 ppt 作者  金福生 李朴之_ iOS应用程序开发方法与实践-第07章_第3页
第3页 / 共22页
iOS应用程序开发方法与实践 教学课件 ppt 作者  金福生 李朴之_ iOS应用程序开发方法与实践-第07章_第4页
第4页 / 共22页
iOS应用程序开发方法与实践 教学课件 ppt 作者  金福生 李朴之_ iOS应用程序开发方法与实践-第07章_第5页
第5页 / 共22页
点击查看更多>>
资源描述

《iOS应用程序开发方法与实践 教学课件 ppt 作者 金福生 李朴之_ iOS应用程序开发方法与实践-第07章》由会员分享,可在线阅读,更多相关《iOS应用程序开发方法与实践 教学课件 ppt 作者 金福生 李朴之_ iOS应用程序开发方法与实践-第07章(22页珍藏版)》请在金锄头文库上搜索。

1、第7章 基本数据持久化技术,本章内容概要,了解iOS SDK提供的若干数据持久化方法,及各自的优缺点。 了解应用程序的目录结构。 掌握文件管理器对象的使用方法。 掌握使用文本文件保存简单数据的方法。,2,iOS应用程序开发方法与实践,本章内容概要,了解属性列表对象的类型,掌握属性列表对象与文件的转换方式,并了解其局限性。 掌握键值归档与解档的过程。 了解对象图的含义,能够运用条件归档限制对象图的范围。 掌握表格视图、表格视图控制器的基本使用方法,进一步熟悉IB的使用方法。 能够在程序运行与挂起状态切换时保存和加载程序的状态。,3,iOS应用程序开发方法与实践,7.1 背景知识,各种数据持久化方

2、法简介。 了解应用程序目录结构与作用。,iOS应用程序开发方法与实践,4,7.1.1 数据持久化方法简介,不同的数据持久化方式适用于不同场合。 基于字符串的文本文件: 直接将字符串对象写入文本文件,或是通过文本文件初始化新的字符串对象。 需要自己定义文件内容的格式,并对字符串进行解析。 属性列表文件: 把特定类型的数据对象(NSString、NSArray、NSDictionary、NSNumber对象等)直接序列化到属性列表文件中。 无需自己定义文件的存储格式。 只有有限几种类型的对象才能够使用这种方式。,5,iOS应用程序开发方法与实践,7.1.1 数据持久化方法简介,归档与解档: 能够序

3、列化与反序列化任何遵从NSCoding协议的类的对象。 弥补了属性列表只能针对某几种类型对象的不足。 类必须实现NSCoding协议,并提供归档与解档的具体过程。 关系型数据库管理系统SQLite: 通过对应用程序的数据进行规范化,设计表、关联和约束来维护数据。 可以保存规模较大的数据,同时有效降低内存占用量。 通过SQL语句实现灵活的查询。,6,iOS应用程序开发方法与实践,7.1.1 数据持久化方法简介,Core Data框架: 对数据进行建模,以面向对象的方式操作数据。 可以保存规模较大的数据。,iOS应用程序开发方法与实践,7,7.1.2 应用程序的目录结构,应用程序运行在沙箱环境中,

4、只能访问和修改Home目录中的文件,不能访问和修改其他目录中的文件。 应用程序包含以下几个重要目录: .app:应用程序的包,包含可执行文件、编译后的界面nib文件、以及所有内嵌资源。 Documents:保存用户生成的、不可重新创建的数据文件。 Library:保存程序的特殊设置与数据。其中Preferences目录保存程序的设置,而Caches目录保存可以重新下载或者重新生成的数据文件。 tmp:临时目录,用于保存运行过程中的临时文件。,8,iOS应用程序开发方法与实践,7.1.2 应用程序的目录结构,目录路径的获取方法: Home目录:NSHomeDirectory()函数。 Docum

5、ents目录与Caches目录:在Home目录下进行搜索得到。 tmp目录:NSTemporaryDirectory()函数。 程序在模拟器与在真实设备上运行时,Home目录路径不一样,路径中包含应用程序唯一标识。 应用程序唯一标识是一长串字符,它是全球唯一标识(GUID),在Xcode部署应用程序时自动生成。,iOS应用程序开发方法与实践,9,7.1.2 应用程序的目录结构,文件管理器对象是NSFileManager对象,用于对文件与目录进行各种常见操作。 文件管理器对象是单件对象。 NSFileManager* fileManager = NSFileManager defaultMana

6、ger; 对文件与目录进行遍历: - (BOOL)fileExistsAtPath:(NSString*)path isDirectory:(BOOL*)isDirectory; 判断目录或者文件是否存在。 - (NSDirectoryEnumerator*)enumeratorAtPath:(NSString*)path; 参见教材“案例:遍历应用程序的目录与文件”。,iOS应用程序开发方法与实践,10,7.2 文本文件,使用文本文件保存程序数据。 加载数据:通过文件直接初始化字符串。 保存数据:将数据按照一定格式拼接为字符串,然后将其保存到文本文件中。 需要开发人员自己定义数据格式,并自己

7、对数据进行提取和处理。 参见教材“案例:使用文本文件保存数据”。,iOS应用程序开发方法与实践,11,7.3 属性列表,使用文本文件比较复杂,容易出错。 使用属性列表文件可以很方便地保存和加载程序的数据,不必自己定义字符串的格式。 并非所有对象都能以属性列表的形式保存,只有NSDictionary、NSArray、NSString、NSNumber、NSData、NSDate及其可修改类(Mutable)的对象或嵌套对象才可以保存为属性列表文件。 上述类的对象也称作属性列表对象。 如果程序中的对象并不是属性列表对象,则需要将其转换为属性列表对象,然后再保存。,12,iOS应用程序开发方法与实践

8、,7.3 属性列表,属性列表文件是一个XML文件,包含了对象层次、类型信息与值。 属性列表对象与属性列表文件(或者URL)在进行相互转换时,可以指定某种编码/解码方式。 参见教材“案例:使用属性列表序列化简单对象”。,13,iOS应用程序开发方法与实践,7.4 对象图的归档与解档,非属性列表对象不能直接保存为属性列表文件,需要先对其进行转换。 归档与解档用于解决上述问题。 在归档对象时,会记录对象的类型信息与指定的成员变量的值,将其编码为字节流。 在解档对象时,会将字节流解码,还原原始对象在归档时的状态。 字节流可以方便地写入到文件或通过网络传送。 归档只是Objective-C中的说法,其实

9、它就相当于其他编程语言中的序列化。,14,iOS应用程序开发方法与实践,7.4.1 NSCoding协议,因为属性列表对象的类型只有有限的几种,所以Foundation框架是预先知道如何对其进行序列化的。 而对于自定义类型的对象,需要在类中给出归档与解档的具体过程,这是通过让类实现协议NSCoding实现的。,15,iOS应用程序开发方法与实践,7.4.1 NSCoding协议,NSCoding协议用于指定类如何进行归档和解档。 protocol NSCoding - (void)encodeWithCoder:(NSCoder*)aCoder; - (id)initWithCoder:(NS

10、Coder*)aDecoder; end encodeWithCoder:方法:指出如何将对象的重要成员变量编码(归档、序列化)到字节流中。 initWithCoder:方法:给出如何从字节流中将成员变量进行解码(解档、反序列化)并恢复对象状态。 所有的Foundation类及大部分的UIKit界面类都实现了该协议,大部分对象都是可以进行归档的 。,16,iOS应用程序开发方法与实践,7.4.3 键值归档,键值归档基于键值对,它为对象的每个重要成员变量设置一个键(唯一的字符串名字),通过键就能够直接归档或解档对应的值(对象的成员变量)。 键值归档是随机存取的操作方式。 需要在归档数据中记录对象

11、的类型信息、键值的对应关系。 键值归档具有出色的灵活性与兼容性,是首选的归档方式。,17,iOS应用程序开发方法与实践,7.4.3 键值归档,NSCoder类的子类NSKeyedArchiver与NSKeyedUnarchiver分别用于进行键值归档与解档操作。 + (BOOL)archiveRootObject:(id)rootObject toFile:(NSString*)path; + (id)unarchiveObjectWithFile:(NSString*)path; 使用上述两个类进行归档与解档时,对于相同的对象不会重复进行归档和解档。 参见教材“案例:使用键值归档”。,18,

12、iOS应用程序开发方法与实践,7.4.4 对象图,应用程序创建了各式各样的对象,对象间构成了一个复杂的网状结构,称之为“对象图”。 对某个对象归档,实际上是以该对象为对象图的起始点(根对象),依次归档该对象引用的所有其他对象,然后还会归档这些对象引用的所有对象,如此继续下去。 + (BOOL)archiveRootObject:(id)rootObject toFile:(NSString*)path; 带来的问题:循环引用与重复引用,以及归档很多不相干的对象。 需要对归档的对象进行限制。,19,iOS应用程序开发方法与实践,7.4.5 无条件归档与条件归档,无条件归档:首先判断当前对象是否已

13、经归档,如果是则仅仅添加引用,否则归档对象。 有条件归档:首先判断当前对象是否已经归档,如果是则仅仅添加引用,否则: 如果该对象之后被无条件归档,则添加到该对象的引用。 如果该对象之后一直未被无条件归档,则不归档该对象。 进行条件归档的对象要想被归档,需要至少有一次被无条件归档才可以。 参见教材“案例:使用条件归档限制对象图的范围”。,20,iOS应用程序开发方法与实践,7.5 综合案例:商品清单程序,教材“综合案例:商品清单程序”中介绍了以下内容: 通过归档与解档来保存应用程序的数据和状态。 表格视图的用法,包括设置其数据源与委托。 单元格的重用与性能提升。 保存与恢复程序的状态。 Interface Builder与表格视图的使用方法。,21,iOS应用程序开发方法与实践,小结,本章主要介绍了以下内容: 不同数据持久化方法的特点与使用场合。 应用程序的目录结构。 获取特殊目录路径的方式。 字符串与文本文件的相互转换。 使用属性列表的限制条件。 归档与解档的实现方式。 使用条件归档限制对象图的范围。 表格视图的使用方法。 在前台与后台切换程序时保存和恢复程序的状态。,22,iOS应用程序开发方法与实践,

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 高等教育 > 大学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号