版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、在iOS开发过程中,不管是做什么应用,都会碰到数据保存的问题。将数据保存到本地,能够让程序的运行更加流畅,不会出现让人厌恶的菊花形状,使得用户体验更好。下面介绍一下数据保存的方式:1.NSKeyedArchiver:采用归档的形式来保存数据,该数据对象需要 遵守NSCoding协议,并且该对象对应的类必须提供encodeWithCoder:和initWithCoder:方法。前一个方法告诉系统怎么对 对象进行编码,而后一个方法则是告诉系统怎么对对象进行解码。例如对Possession对象归档保存。 定义Possession:interface Possession:NSObject<NS
2、Coding>/遵守NSCoding协议 NSString *name;/待归档类型 implementation Possession -(void)encodeWithCoder:(NSCoder *)aCoder aCoder encodeObject:name forKey:"name"-(void)initWithCoder:(NSCoder *)aDe
3、coder name=aDeCoder decodeObjectforKey:"name" retain; 归档操作: 如果对Possession对象allPossession归档保存,只需要NSCoder子类NSKeyedArchiver的方法archiveRootObject:toFile: 即可。 NSString *path = self possessionArchivePath; NSKeyedArchiver archiveRo
4、otObject:allPossessions toFile: path 解压操作: 同样调用NSCoder子类NSKeyedArchiver的方法unarchiveRootObject:toFile: 即可 allPossessions = NSKeyedUnarchiver unarchiveObjectWithFile:path retain; 缺点:归档的形式来保存数据,只能一次性归档保存以及一次性解压。所以只能针对小量数据,而且对数据操作比较笨拙,即如果想改动数据的某一小部分,还是需要解压整个数据或者归档整个数据。 2.NSUserDefaults:用来保存应
5、用程序设置和属性、用户保存的数 据。用户再次打开程序或开机后这些数据仍然存在。NSUserDefaults可以存储的数据类型包括:NSData、NSString、 NSNumber、NSDate、NSArray、NSDictionary。如果要存储其他类型,则需要转换为前面的类型,才能用NSUserDefaults存储。具体实现为: 保存数据:NSUserDefaults *defaults =NSUserDefaults standardUserDefaults;NSString *name =”default string“;defaults setObject:firstName for
6、Key:"name" /获得UIImage实例 UIImage *image=UIImage allocinitWithContentsOfFile:"photo.jpg" NSData *imageData = UIImageJPEGRepresentation(image, 100);/UIImage对象转换成NSData defaults synchronize;/用synchronize方法把数据持久化到standardUserDefaults数据库 读取数据: NSUserDefaults *defau
7、lts =NSUserDefaults standardUserDefaults;NSString *name = defaults objectForKey:"name"/根据键值取出nameNSData *imageData = defaults dataForKey:"image"UIImage *Image = UIImage imageWithData:imageData;/NSData转换为UIImage3. Write写入方式:永久保存在磁盘中。具体方法为: 第一步:获得文件即将保存的路径:NSArray *documentPaths =
8、NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask,YES);/使用C函数NSSearchPathForDirectoriesInDomains来获得沙盒中目录 的全路径。该函数有三个参数,目录类型、he domain mask、布尔值。其中布尔值表示是否需要通过扩展路径。而且第一个参数是不变的,即为NSSearchPathDirectory 。在IOS中后两个参数也是不变的,即为:NSUserDomainMask 和 YES。 NSString *ourDocumentPat
9、h =documentPaths objectAtIndex:0;还有一种方法是使用NSHomeDirectory函数获得sandbox的路径。具体的用法为:NSString *sandboxPath = NSHomeDirectory();/ Once you have the full sandbox path, you can create a path from it,但是不能在sandbox的本文件层上写文件也不能创建目录,而应该是此基础上创建一个新的可写的目录,例如Documents,Library或 者temp。NSString *documentPath = sandboxPa
10、th stringByAppendingPathComponent:"Documents"/将Documents添加到sandbox路径上,具体原因前面分析了! 这两者的区别就是:使用NSSearchPathForDirectoriesInDomains比在NSHomeDirectory后面添加Document更加安全。因为该文件目录可能在未来发送的系统上发生改变。 第二步:生成在该路径下的文件: NSString *FileName=docu
11、mentDirectory stringByAppendingPathComponent:fileName;/fileName就是保存文件的文件名第三步:往文件中写入数据:data writeToFile:FileName atomically:YES;/将NSData类型对象data写入文件,文件名为FileName 最后:从文件中读出数据: NSData data=NSData dataWithContentsOfFile:FileName options:0 error:NULL;/从FileName中读取出数据4. SQLite:采用SQLite数据库来存储数据。SQLite作为一中小
12、型数据库,应用ios中,跟前三种保存方式相比,相对比较复杂一些。还是一步步来吧! 第一步:需要添加SQLite相关的库以及头文件:在项目文件的Build Phases下,找到Link Binary Library(ies),添加libsqlite3.0.dylib(libsqlite3.dylib与前者的区别暂时不知,两者应该差不多);在项目文件中头文件或者源文件中添加头文件#import "/usr/include/sqlite3.h" 第二步:开始使用SQLite:使用前注意:如果不往数据库里面添加任何的表,这个数据库等于没有建立,不会在硬盘上产生任何文件,如果数据库已
13、经存在,则会打开这个数据库。 NSArray *documentsPaths=NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask , YES);NSString *databaseFilePath=documentsPaths objectAtIndex:0 stringByAppendingPathComponent:"mydb"/上面两句已经比较熟悉了吧! /打开数据库if (sqlite3_open(databaseFilePath UTF8String, &am
14、p;database)=SQLITE_OK) NSLog("sqlite dadabase is opened."); else return;/打开不成功就返回 在打开了数据库的前提下,如果数据库没有表,那就开始建表了哦!char *error; const char *createSql="create table(id integer primary key autoincrement, name text)"if (sqlite3
15、_exec(database, createSql, NULL, NULL, &error)=SQLITE_OK) NSLog("create table is ok."); else NSLog("error: %s",error); sqlite3_free(error);/每次使用完毕清空er
16、ror字符串,提供给下一次使用 建表完成之后,就开始插入记录:const char *insertSql="insert into a person (name) values(gg)" if (sqlite3_exec(database, insertSql, NULL, NULL, &error)=SQLITE_OK) NSLog("insert operation is ok."); else
17、0; NSLog("error: %s",error); sqlite3_free(error);/每次使用完毕清空error字符串,提供给下一次使用 下一步,查询记录: const char *selectSql="select id,name from a person" sqlite3_stmt *statement; if (sqlite3_prepare_v2(database,selectSq
18、l, -1, &statement, nil)=SQLITE_OK) NSLog("select operation is ok."); else NSLog("error: %s",error); sqlite3_free(error); while(sqlite3_step(statement)=SQLITE_ROW) int _id=sqlite3_column_int(statement, 0); NSString *name=(char*)sql
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 感光材料乳剂合成工岗前安全生产基础知识考核试卷含答案
- 银行信贷员岗前履职考核试卷含答案
- 丁腈橡胶装置操作工保密知识考核试卷含答案
- 金属材热处理工安全演练测试考核试卷含答案
- 皮鞋制作工持续改进强化考核试卷含答案
- 天然气提氦操作工岗前全能考核试卷含答案
- 塑石工创新实践强化考核试卷含答案
- 数据标注员岗前技巧考核试卷含答案
- 2024年山西信息职业技术学院辅导员考试参考题库附答案
- 纺丝原液制备工测试验证评优考核试卷含答案
- 生产设备维护保养规范作业指导书
- 专业学位研究生课程案例库建设项目申请书
- 骨髓炎VSD的护理
- GB/T 44230-2024政务信息系统基本要求
- 经导管主动脉瓣置换术(TAVR)患者的麻醉管理
- 本霍根的五堂课中文版
- 环境保护体系框图
- 幼儿园课程标准要求
- 导流洞衬砌施工方案
- 江河流域农业面源污染综合治理项目初步设计
- 基坑开挖施工方案-自然放坡
评论
0/150
提交评论