码迷,mamicode.com
首页 > 移动开发 > 详细

iOS 开发指南 第11章 数据持久化之属性列表 学习

时间:2015-09-19 10:49:09      阅读:357      评论:0      收藏:0      [点我收藏+]

标签:

1 概述

  沙箱目录:一种安全策略,原理是只能允许自己的应用访问目录,而不许其他应用访问。

  子目录:Documents 用于储存非常大的文件或需要非常频繁更新的数据

                              NSArray *documentDirectory=NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask,YES);

                              documentDirectory是只有一个元素的数组,还需要取出路径

                              NSString *myDocPath=[documentDirectory objectAtIndex:0];

             Library Preferences用于存放应用程序的设置数据 Caches用于存放缓存文件

             tmp 临时文件目录 NSString *temDirectory=NSTemporaryDirectory(); 

2 持久化方式 数据储存方式

   属性列表:是XML文件,数组和字典可以与属性列表文件相互转换。

    NSArray和NSDictionary提供了读写属性列表文件的方法:+array/dictionaryWithContentsOfFile:

                                                                                -initWithContentOfFile:

                                                                                 writeToFile:atomically:是否使用辅助文件

获取文件代码:

- (NSString *)applicationDocumentsDirectoryFile {获取沙箱Documents目录文件的完整路径
    NSString *documentDirectory = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];
    NSString *path = [documentDirectory stringByAppendingPathComponent:@"NotesList.plist"];

    return path;
}
- (void)createEditableCopyOfDatabaseIfNeeded {
    
    NSFileManager *fileManager = [NSFileManager defaultManager];
    NSString *writableDBPath = [self applicationDocumentsDirectoryFile];获取文件目录
    判断文件是否存在:fileExistsAtPath:
    BOOL dbexits = [fileManager fileExistsAtPath:writableDBPath];
    if (!dbexits) {若不存在则复制一个
        NSString *defaultDBPath = [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"NotesList.plist"];
        
        NSError *error;
        BOOL success = [fileManager copyItemAtPath:defaultDBPath toPath:writableDBPath error:&error];
        NSAssert(success, @"错误写入文件");断言函数,第一个参数为假时抛出异常
    }
}

读取与写入文件代码:程序的插入/删除/查询等无非是文件的操作

//插入Note方法
-(int) create:(Note*)model
{
    NSString *path = [self applicationDocumentsDirectoryFile];
    NSMutableArray *array = [[NSMutableArray alloc] initWithContentsOfFile:path];
    
    NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init];
    [dateFormat setDateFormat: @"yyyy-MM-dd HH:mm:ss"];
    将传入的数据封装成文件所需格式
    NSDictionary* dict = [NSDictionary
                          dictionaryWithObjects:@[[dateFormat stringFromDate: model.date],model.content]
                          forKeys:@[@"date",@"content"]];
setValue:forKey:
* [array addObject:dict]; [array writeToFile:path atomically:YES];
return 0; } //删除Note方法 -(int) remove:(Note*)model { NSString *path = [self applicationDocumentsDirectoryFile]; NSMutableArray *array = [[NSMutableArray alloc] initWithContentsOfFile:path]; for (NSDictionary* dict in array) { NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; [dateFormatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"]; 是把value取出来而不是key比较 //Note* note = [[Note alloc] init]; NSDate *date = [dateFormatter dateFromString:[dict objectForKey:@"date"]]; //note.content = [dict objectForKey:@"content"]; //比较日期主键是否相等 if ([date isEqualToDate:model.date]){ [array removeObject: dict]; [array writeToFile:path atomically:YES]; break; } } return 0; } //修改Note方法 -(int) modify:(Note*)model { NSString *path = [self applicationDocumentsDirectoryFile]; NSMutableArray *array = [[NSMutableArray alloc] initWithContentsOfFile:path]; for (NSDictionary* dict in array) { NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; [dateFormatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"]; NSDate *date = [dateFormatter dateFromString:[dict objectForKey:@"date"]]; NSString* content = [dict objectForKey:@"content"]; //比较日期主键是否相等 if ([date isEqualToDate:model.date]){ [dict setValue:content forKey:@"content"]; [array writeToFile:path atomically:YES]; break; } } return 0; } //查询所有数据方法 -(NSMutableArray*) findAll { NSString *path = [self applicationDocumentsDirectoryFile]; //[self.listData removeAllObjects]; NSMutableArray *listData = [[NSMutableArray alloc] init]; NSMutableArray *array = [[NSMutableArray alloc] initWithContentsOfFile:path]; for (NSDictionary* dict in array) { NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; [dateFormatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"]; Note* note = [[Note alloc] init]; note.date = [dateFormatter dateFromString:[dict objectForKey:@"date"]]; note.content = [dict objectForKey:@"content"]; [listData addObject:note]; } return listData; } //按照主键查询数据方法 -(Note*) findById:(Note*)model { NSString *path = [self applicationDocumentsDirectoryFile]; NSMutableArray *array = [[NSMutableArray alloc] initWithContentsOfFile:path]; for (NSDictionary* dict in array) { NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; [dateFormatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"]; Note* note = [[Note alloc] init]; note.date = [dateFormatter dateFromString:[dict objectForKey:@"date"]]; note.content = [dict objectForKey:@"content"]; //比较日期主键是否相等 日期字段是主键 if ([note.date isEqualToDate:model.date]){ return note; } } return nil; }

 

iOS 开发指南 第11章 数据持久化之属性列表 学习

标签:

原文地址:http://www.cnblogs.com/haugezi/p/4821020.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!