IOS学习:ios中的数据持久化初级(文件、xml、json、sqlite、CoreData)
# 使用NSSearchPathForDiretoriesInDomains()方法只能定位Caches目录和Documents目录
NSArray *paths = NSSearchPathForDiretoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES)
# NSHomeDirectory();可以取得应用的根目录
e.g 通过home取tmp目录
NSString *fileName = [NSHomeDirectory() stringByAppendingPathComponent:@"tmp/myFile.txt"];
# 使用资源文件:
# 应用安装到设备上后,资源文件是在app(即home目录)目录下的
e.g 获取资源文件
NSString *filePath = [[NSBundle mainBundle] pathForResourcce:@"f" ofType:@"txt"];
NSStirng *fileContent = [[NSString stringWithContentsOfFile:filePath encoding:NSUTF8StringEncoding error nil];
;
/* sqlite的方法
* 1、sqlite3 *db,数据库句柄,跟文件句柄FILE很类似
* 2、sqlite3_stmt *stmt,这个相当于ODBC的Command对象,用于保存编译好的SQL语句
* 3、sqlite3_open() 打开数据库,没有数据库时创建
* 4、sqlite3_exec() 执行非查询的sql语句
* 5、Sqlite3_step() 在调用sqlite3_prepare后,使用这个函数在记录集中移动
* 6、sqlite3_close()关闭数据库
*
* 还有一系列用于从记录集字段中获取数据,e.g
* 1、sqlite3_column_text() 取text类型的数据
* 2、sqlite3_column_blob() 取blob类型数据
* 3、sqlite3_column_int() 取int类型数据
* 数据库操作要添加 libsqlite3.dylib 静态库
* 包含头文件: import "sqlite3.h"
*/
// 开始解析某个元素时调用的方法
- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict;
// 解析完一个元素时回调的方法
- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string;
- /*
- {
- "aps":
- {
- "alert" :
- {
- "body" : "a msg come!"
- },
- "bage": 3,
- "sound" : "def.mp3"
- }
- }
- */
- NSString *strJson = @"{\"aps\":{\"alert\":{\"body\":\"a msg come!\"}, \"bage\":3, \"sound\":\"def.mp3\"}}";
- // result中即为解析出来的json文件,通过valueForKey即可读到相应的数据
- NSDictionary *result = [strJson objectFromJSONString];
- NSLog(@"%@", result);
- NSString *myJsonPath = [[NSBundlemainBundle] pathForResource:@"my"ofType:@"json"];
- NSString *myJsonStr = [NSStringstringWithContentsOfFile:myJsonPath encoding:NSUTF8StringEncodingerror:nil];
- NSLog(@"myJsonStr : %@", myJsonStr);
- NSDictionary *myResult = [myJsonStr objectFromJSONString];
- NSLog(@"myJson : %@", myResult);
- // 生成json文件
- NSMutableDictionary *jsonDic = [[NSMutableDictionarydictionary] autorelease];
- NSMutableDictionary *alert = [[NSMutableDictionarydictionary] autorelease];
- NSMutableDictionary *aps = [[NSMutableDictionarydictionary] autorelease];
- [alert setObject:@"a msg come!"forKey:@"body"];
- [aps setObject:alert forKey:@"alert"];
- [aps setObject:@"3"forKey:@"bage"];
- [aps setObject:@"def.mp3"forKey:@"sound"];
- [jsonDic setObject:aps forKey:@"aps"];
- NSString *jsonStr = [jsonDic JSONString];
@property (nonatomic, retain, readonly) NSManagedObjectModel *managedObjectModel;
@property (nonatomic, retain, readonly) NSPersistentStoreCoordinator *persisteneStoreCoordinator;
- (void)saveContext;
- (NSURL *)applicationDocumentsDirectory;
- -(void)saveContext
- {
- NSError *error = nil;
- NSManagedObjectContext *managedObjectContext = self.managedObjectContext;
- if (managedObjectContext != nil) {
- if ([managedObjectContext hasChanges] && ![managedObjectContext save:&error]) {
- NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
- abort();
- }
- }
- }
- #pragma mark - Core Data stack
- - (NSManagedObjectContext *)managedObjectContext
- {
- if (__managedObjectContext != nil) {
- return__managedObjectContext;
- }
- NSPersistentStoreCoordinator *coordinator = [selfpersisteneStoreCoordinator];
- if (coordinator != nil) {
- __managedObjectContext = [[NSManagedObjectContextalloc] init];
- [__managedObjectContextsetPersistentStoreCoordinator:coordinator];
- }
- return__managedObjectContext;
- }
- - (NSManagedObjectModel *)managedObjectModel
- {
- if (__managedObjectModel != nil) {
- return__managedObjectModel;
- }
- // 这里URLForResource:@"lich" 的名字(lich)要和你建立datamodel时候取的名字是一样的
- NSURL *modelURL = //[NSURL fileURLWithPath:[@"lich" stringByAppendingPathExtension:@"mom"]];
- [[NSBundlemainBundle] URLForResource:@"lich"withExtension:@"momd"];
- __managedObjectModel = [[NSManagedObjectModelalloc] initWithContentsOfURL:modelURL];
- return__managedObjectModel;
- }
- - (NSPersistentStoreCoordinator *)persisteneStoreCoordinator
- {
- if (__persistentStoreCoordinator != nil) {
- return__persistentStoreCoordinator;
- }
- NSString *docs = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];
- NSURL *storURL = [NSURLfileURLWithPath:[docs stringByAppendingPathComponent:@"lich.sqlite"]];
- // 这个lich.sqlite名字无限制,就是一个数据库文件的名字
- // NSURL *storeNRL = [[self applicationDocumentsDirectory] URLByAppendingPathComponent:@"lich.sqlite"];
- // NSLog(@"storURL : %@", storeNRL);
- // NSLog(@"store : %@", storURL);
- NSError *error = nil;
- __persistentStoreCoordinator = [[NSPersistentStoreCoordinatoralloc] initWithManagedObjectModel:[selfmanagedObjectModel]];
- if (![__persistentStoreCoordinatoraddPersistentStoreWithType:NSSQLiteStoreTypeconfiguration:nilURL:storURL options:nilerror:&error]) {
- NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
- abort();
- }
- return__persistentStoreCoordinator;
- }
- - (void)applicationWillTerminate:(UIApplication *)application
- {
- // Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:.
- [selfsaveContext];
- }

- // 按保存按钮,保存数据
- - (void)addButtonPressed
- {
- [self.titleFieldresignFirstResponder];
- [self.ageFieldresignFirstResponder];
- Entity *entity = (Entity *) [NSEntityDescriptioninsertNewObjectForEntityForName:@"Entity"inManagedObjectContext:self.context];
- [entity setTitle:self.titleField.text];
- [entity setAge:[NSNumbernumberWithInt:[self.ageField.textintValue]]];
- NSError *error;
- BOOL isSaveSuccess = [self.contextsave:&error];
- if (isSaveSuccess) {
- NSLog(@"save successful!");
- } else {
- NSLog(@"Error : %@, %@ ", error, [error userInfo]);
- }
- }
- // 按查找按钮,取出数据
- - (void)queryButtonPressed
- {
- // 创建取回数据请求
- NSFetchRequest *request = [[[NSFetchRequestalloc] init] autorelease];
- // 设置要检索的数据类型
- NSEntityDescription *des = [NSEntityDescriptionentityForName:@"Entity"inManagedObjectContext:self.context];
- // 设置请求实体
- [request setEntity:des];
- // 指定结果的排序方式
- NSSortDescriptor *sortDescriptor = [[[NSSortDescriptoralloc] initWithKey:@"age"ascending:NO] autorelease];
- NSArray *sortDescriptions = [[[NSArrayalloc] initWithObjects:sortDescriptor, nil] autorelease];
- [request setSortDescriptors:sortDescriptions];
- NSError *error = nil;
- NSMutableArray *mutableFetchResult = [[self.contextexecuteFetchRequest:request error:&error] mutableCopy];
- if (mutableFetchResult == nil) {
- NSLog(@"Error : %@ , %@", error, [error userInfo]);
- }
- self.entities = mutableFetchResult;
- NSLog(@"The count of entry: %d", [self.entitiescount]);
- for (Entity *entity inself.entities) {
- NSLog(@"Title : %@ --------- Age: %d", entity.title, [entity.ageintValue]);
- }
- [mutableFetchResult release];
- }
IOS学习:ios中的数据持久化初级(文件、xml、json、sqlite、CoreData)的更多相关文章
- iOS中的数据持久化方式
iOS中的数据持久化方式,基本上有以下四种:属性列表.对象归档.SQLite3和Core Data. 1.属性列表 涉及到的主要类:NSUserDefaults,一般 [NSUserDefaults ...
- iOS面试题--Model层--数据持久化储存方案
数据持久化储存方案有哪些? iOS中的数据持久化方式,基本上有以下四种:属性列表.对象归档.SQLite3和Core Data 1.属性列表涉及到的主要类:NSUserDefaults,一般 [NSU ...
- 关于iOS去除数组中重复数据的几种方法
关于iOS去除数组中重复数据的几种方法 在工作工程中我们不必要会遇到,在数组中有重复数据的时候,如何去除重复的数据呢? 第一种:利用NSDictionary的AllKeys(AllValues)方 ...
- IOS学习:常用第三方库(GDataXMLNode:xml解析库)
IOS学习:常用第三方库(GDataXMLNode:xml解析库) 解析 XML 通常有两种方式,DOM 和 SAX: DOM解析XML时,读入整个XML文档并构建一个驻留内存的树结构(节点树),通过 ...
- iOS学习——iOS原生实现二维码扫描
最近项目上需要开发扫描二维码进行签到的功能,主要用于开会签到的场景,所以为了避免作弊,我们再开发时只采用直接扫描的方式,并且要屏蔽从相册读取图片,此外还在二维码扫描成功签到时后台会自动上传用户的当前地 ...
- Android中的数据持久化机制
Android中几种最简单但是却最通用的数据持久化技术:SharedPreference.实例状态Bundle和本地文件. Android的非确定性Activity和应用程序生存期使在会话间保留UI状 ...
- redis学习(九)——数据持久化
一.概述 Redis的强大性能很大程度上都是因为所有数据都是存储在内存中的,然而当Redis重启后,所有存储在内存中的数据将会丢失,在很多情况下是无法容忍这样的事情的.所以,我们需要将内存中的数据持久 ...
- C# 将List中的数据导入csv文件中
//http://www.cnblogs.com/mingmingruyuedlut/archive/2013/01/20/2849906.html C# 将List中的数据导入csv文件中 将数 ...
- Python3 Pandas的DataFrame格式数据写入excle文件、json、html、剪贴板、数据库
Python3 Pandas的DataFrame格式数据写入excle文件.json.html.剪贴板.数据库 一.DataFrame格式数据 Pandas是Python下一个开源数据分析的库,它提供 ...
随机推荐
- Silverlight客户端调用WCF服务难题解疑
一:解决办法 Silverlight客户端调用WCF服务在实际使用中经常会出现的问题就是无法直接应用类文件和配置文件.微软针对这一情况已经给出了解决办法.WCF开发框架可以帮助我们实现可靠性较高的跨平 ...
- hadoop 运行 datanode , mac 系统
问题描述 今天使用 hadoop 时,发现无法通过下面命令上传文件到 hadoop 文件系统,会报错. bin/hadoop fs -put input . 运行 jps 后,输出如下: Resour ...
- ORACLE的RMAN
1.什么是RMAN? RMAN可以用来备份和还原数据库文件.归档日志和控制文件.它也可以用来执行完全或不完全的数据库恢复. 注意:RMAN不能用于备份初始化参数文件和口令文件. RMAN启动数据库上的 ...
- windows 编程—— 学习指导
这里有一份很好的资源,被制作成chm文件的<Windows 程序设计>,包含了中文版和英文版,还有全书源代码,虽然不知道是谁出版的,但是感觉对Windows编程新手来说还是很不错的.关键还 ...
- JavaScript typeof obj === ‘object’ 这样写有什么问题
typeof Array, Object, new Class() 都会返回'object', 所以使用typeof不能准确的判断变量是否为object typeof []; //object ty ...
- IBinder对象在进程间传递的形式(一)
命题 当service经常被远程调用时,我们经常常使用到aidl来定一个接口供service和client来使用,这个事实上就是使用Binder机制的IPC通信.当client bind servic ...
- Java基础知识强化之IO流笔记01:异常的概述和分类
IO流操作的时候会出现很多问题,java中叫作异常,所以我们先介绍一下异常: 1. 程序的异常:Throwable(Throwable类是java中所有异常或错误的超类) (1)严重问题:Error ...
- 比较好的总结runtime
http://www.cocoachina.com/ios/20160128/15154.html
- C#总结项目《影院售票系统》编写总结三
昨天总结了动态绘制控件.票类型的切换以及数据在窗体中的展现.今天继续总结,自己喜欢的就去做吧,让别人说去吧,省的自己再留下什么后悔遗憾,噢耶,加油! 今天总结项目中最核心的部分--购票.座位颜色状态的 ...
- LINQ Enumerable
System.Linq.Enumerable类,提供了数十种称为扩展方法的共享方法,帮助您操作所有实现IEnumerable(of T)接口的类中的数据.由于Enumerable类的扩展方法可以处理许 ...