数据持久化
2016-04-04 本文已影响28人
jadyn_JT
沙盒路径
沙盒中的文件夹.png1)获取本地documents路径
1)第一种方法:
NSString *documentsPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask,YES)objectAtIndex:0];
2)第二种方法:
NSString *DocumentsPath = [NSHomeDirectory() stringByAppendingPathComponent:@"/Documents"];
2)获取library路径
1)第一种方法:
NSString *libraryPath = [NSSearchPathForDirectoriesInDomains(NSLibraryDirectory,NSUserDomainMask,YES)objectAtIndex:0];
2)第二种方法:
NSString *LibraryPath = [NSHomeDirectory() stringByAppendingPathComponent:@"/Library"];
3)获取temp路径
1)第一种方法:
NSString *tempPath = NSTemporaryDirectory();
2)第二种方法:
NSString *tmpPath = [NSHomeDirectory() stringByAppendingPathComponent:@"/tmp"];
4)保存一张图片到documents下的ios文件夹中
NSString *imageDir = [NSString
stringWithFormat:@"%@/Documents/%@", NSHomeDirectory(), @"ios"];
NSFileManager *fileManager = [NSFileManager defaultManager];
if([fileManager fileExistsAtPath:imageDir]){
NSLog(@"存在");
}else{
NSLog(@"不存在");
//创建文件夹路径
[[NSFileManager defaultManager] createDirectoryAtPath:imageDir
withIntermediateDirectories:YES attributes:nil error:nil];
}
UIImage *image = [UIImage imageNamed:@"1.png"];
//设置一个图片的存储路径
NSString *imagePath = [imageDir stringByAppendingString:@"/aa.png"];
//将图片写入到ios文件夹中
[UIImagePNGRepresentation(image) writeToFile:imagePath atomically:YES];
5)遍历Documents下的所有文件名称
NSFileManager *fileManager = [NSFileManager defaultManager];
//获取本地Documents路径
NSString*DocumentsPath=[NSHomeDirectory() stringByAppendingPathComponent:@"/Documents"];
NSError *error = nil;
NSArray *fileList = [[NSArray alloc] init];
fileList=[fileManager contentsOfDirectoryAtPath:DocumentsPath error:&error];
NSLog(@"%@",fileList);
属性列表(plist文件)
创建plist文件.png取出plist文件中的数据
NSString *plistPath = [[NSBundle mainBundle] pathForResource:@"phone" ofType:@"plist"];
NSArray *array = [NSArray arrayWithContentsOfFile:plistPath];
NSMutableArray *dataSource = [NSMutableArray arrayWithArray:array];
NSLog(@"%@",dataSource);
NSUserDefaults
NSUserDefaults *UserDefaults=[NSUserDefaults standardUserDefaults];
//保存用户头像
UIImage *image=[UIImage imageNamed:@"aa.png"];
[UserDefaults setObject:UIImagePNGRepresentation(image) forKey:@"image"];
//取出用户头像
UIImage*Newimage=[UIImage imageWithData:[UserDefaults objectForKey:@"image"]];
//保存用户名
[UserDefaults setObject:@"林毛家" forKey:@"name"];
//取出用户名
NSString *name=[UserDefaults objectForKey:@"name"];
//判断是否第一次登陆
[UserDefaults setBool:YES forKey:@"isFirst"];
从bundle中获取文件路径
NSString *theupfilePath=[[NSBundle mainBundle]pathForResource:@"aa"ofType:@"gif"];
对象归档
如果归档的类型是 自定义对象类型,必须实现 NSCoding协议 才能进行归档
1)编码方法:
-(void)encodeWithCoder:(NSCoder *)aCoder{
[aCoder encodeObject:_desc forKey:@"desc"];
}
2)解码方法:
-(id)initWithCoder:(NSCoder *)aDecoder{
if (self = [super init]) {
self.desc = [aDecoder decodeObjectForKey
:@"desc"];
}
return self;
}
3)定义 归档器
//定义归档器
NSMutableData *mdata = [NSMutableData data];
NSKeyedArchiver *arch = [[NSKeyedArchiver alloc] initForWritingWithMutableData:mdata];
[arch encodeObject:dataSource forKey:ArchviedKey];
[arch finishEncoding];
4)定义 反归档器
//先获取 所存数据 的路径
NSString *documentPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];
NSString *dirPath = [documentPath stringByAppendingPathComponent:@"cached"];
NSData *data= [NSData dataWithContentsOfFile:[dirPath stringByAppendingPathComponent:@"datasoruce.txt"]];
//反归档
NSKeyedUnarchiver *unarchive = [[NSKeyedUnarchiver alloc] initForReadingWithData:data];
NSArray *cachArray = [unarchive decodeObjectForKey:ArchviedKey];
[unarchive finishDecoding];
CoreData
Core Data 支持随着app开发演进而带来的对象模型(managed object model)升级或修改的管理。模型的改变将导致不兼容(或不能打开)以前版本创建的存储。如果你要改变你的模型,你就必须要改变现有存储中的数据-也就是数据存储格式(store format)-这被称为迁移(migration)。
CoreData版本迁移
- 选中工程中的 xcdaramodeId 文件,Menu->Editor->Add Model Version
- 选中xcdaramodeId,在Xcode右侧的辅助工具栏中找到 Model Version, 选择刚刚添加的Model文件,这个时候你会发现Xcode目录中,Model文件上的绿色的勾选中了当前选择的Model文件
- 创建一个映射文件 (可不用)
- 在新的Model文件中 修改或添加属性 等信息,删除原来的NSManagedObject Subclass,再创建一个新的NSManagedObject Subclass
- 在AppDelegate中 将
if (![_persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:storeURL options:nil error:&error])
{}
中的 options 改为
@{NSMigratePersistentStoresAutomaticallyOption :@YES}