




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 二年级上册数学教案-练习七-北师大版
- 六年级上册数学教案-3.1 倒-数 |西师大版
- 六年级下册数学教案-4.1扇形统计图的认识 ︳西师大版
- 三年级上册数学教案-解决问题第一课时|苏教版
- 六年级上册数学教案 -2.1 分数混合运算|北师大版
- 融资担保培训协议书(2篇)
- 北师大版数学三年级上册单元测试卷-第三单元-加与减(含答案)
- 2024年血压调节用品项目资金筹措计划书代可行性研究报告
- 2025年度两人共同投资可再生能源项目的股份合作合同
- 2025年度合伙人退出与合作伙伴关系维护协议
- 2025年02月贵州省司法厅所属事业单位公开招聘2人笔试历年典型考题(历年真题考点)解题思路附带答案详解
- 2025年01月福建省福利彩票发行中心片区管理员招考笔试历年典型考题(历年真题考点)解题思路附带答案详解
- 法规解读丨2024新版《突发事件应对法》及其应用案例
- JGJ46-2024 建筑与市政工程施工现场临时用电安全技术标准
- 2024年世界职业院校技能大赛高职组“关务实务组”赛项参考试题库(含答案)
- 河北美术出版社小学六年级下册书法练习指导教案
- 五下音乐《美丽的家乡(简谱、五线谱)》课件
- 2024年长沙职业技术学院高职单招(英语/数学/语文)笔试历年参考题库含答案解析
- (完整版)部编四年级语文下词语表
- 高频电子线路完整章节课件(胡宴如)
- 酒店热水设计方案
评论
0/150
提交评论