数据持久化

2016-04-04  本文已影响28人  jadyn_JT

沙盒路径

沙盒中的文件夹.png
1)获取本地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版本迁移

  1. 选中工程中的 xcdaramodeId 文件,Menu->Editor->Add Model Version
  1. 选中xcdaramodeId,在Xcode右侧的辅助工具栏中找到 Model Version, 选择刚刚添加的Model文件,这个时候你会发现Xcode目录中,Model文件上的绿色的勾选中了当前选择的Model文件
  2. 创建一个映射文件 (可不用)
  3. 在新的Model文件中 修改或添加属性 等信息,删除原来的NSManagedObject Subclass,再创建一个新的NSManagedObject Subclass
  4. 在AppDelegate中 将
if (![_persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:storeURL options:nil error:&error]) 
{}

中的 options 改为

@{NSMigratePersistentStoresAutomaticallyOption :@YES}
上一篇下一篇

猜你喜欢

热点阅读