美文网首页
数据持久化

数据持久化

作者: jadyn_JT | 来源:发表于2016-04-04 13:11 被阅读28次

沙盒路径

沙盒中的文件夹.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}

相关文章

  • Docker学习(13) 卷与持久化数据

    Docker学习(13) 卷与持久化数据 卷与持久化数据——简介 数据主要分为两种:持久化和非持久化。 持久化:就...

  • iOS本地数据持久化

    iOS本地数据持久化 iOS本地数据持久化

  • Redis-2 数据持久化及持久化配置

    一、数据持久化 开启持久化功能后,重启redis,数据会自动通过持久化文件恢复!! 1、redis持久化 – 两种...

  • 面试相关

    数据持久化 什么是持久化狭义的理解: “持久化”仅仅指把域对象永久保存到数据库中;广义的理解,“持久化”包括和数据...

  • GeekBand iOS开发高级进阶学习笔记(第四周)

    简易数据存储 数据持久化分为本体持久化和云端持久化本体持久化可以存在本地文件或数据库。云端可以存在iCloud,存...

  • iOS数据持久化

    Title: iOS数据持久化 ##数据持久化概念 数据持久化就是将内存中的数据模型转换为存储模型,以及将存储模型...

  • redis与memcache区别

    1、持久化 redis是支持持久化存储,宕机重启数据不会丢失,memcache重启后数据丢失 redis持久化的方...

  • iOS本地数据持久化

    转载自:CocoaChina - iOS本地数据持久化 本文内容:iOS本地数据持久化的几种类型iOS本地数据持久...

  • Android数据持久化的设计

    title: Android数据持久化 版 本 历 史 1. 数据持久化简介 1.1 数据持久化的需求 在网络异常...

  • 浅谈iOS持久化存储——沙盒存储

    前言 持久化是将程序数据的持久状态和瞬时状态转化的机制,通俗的讲,就是瞬时数据持久化为持久数据。持久化(Persi...

网友评论

      本文标题:数据持久化

      本文链接:https://www.haomeiwen.com/subject/lygulttx.html