代码改变世界

ios - 文件保存路径的获取

2016-04-08 21:20  菜鸟Alex  阅读(1216)  评论(0编辑  收藏  举报
  • "应用程序包": 这里面存放的是应用程序的源文件,包括资源文件和可执行文件。
  • 获取方式:
NSString *path = [[NSBundle mainBundle] bundlePath];

  • Documents: iTunes会同步此文件夹中的内容,一般用来存储持久化的数据.

NSString *path = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES).firstObject;

  • firstObject或者lastobject都可以,因为该目录下只有一个文件夹
  • Library/Caches: iTunes不会同步此文件夹,caches存储缓存的.library目录下另一个文件夹是 preference 偏好设置文件夹,通过获取偏好设置的单例,直接可以保存在偏好设置里面的.plist文件

NSString *path = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES).firstObject;
//偏好设置的单例
NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults]; 
//直接调用方法就能保存入偏好设置里面
[userDefaults setObject:@"hello"forKey:@"hello"];
//保存完以后一定记得同步synchronize更新一下.

  • 临时文件夹tmp: iTunes不会同步此文件夹,里面存的是临时文件,随时可以被删除,一般不怎么用

NSString *path = NSTemporaryDirectory();


比较常用的归档保存

  • 比如要归档一个对象或者model模型,则要归档的对象要遵守 协议
  • 在.m文件中实现归档,解档的协议方法
//
//  Person.m
//  test
//
//  Created by 裴波波 on 16/4/8.
//  Copyright © 2016年 裴波波. All rights reserved.
//

#import "Person.h"

@implementation Person


//归档
-(void)encodeWithCoder:(NSCoder *)aCoder{

    [aCoder encodeObject:self.name forKey:@"name"];
    [aCoder encodeObject:self.age forKey:@"age"];
    [aCoder encodeObject:self.hight forKey:@"hight"];
}

//解档
-(instancetype)initWithCoder:(NSCoder *)aDecoder{

    if([super init]){
        self.name = [aDecoder decodeObjectForKey:@"name"];
        self.age = [aDecoder decodeObjectForKey:@"age"];
        self.hight = [aDecoder decodeObjectForKey:@"hight"];
    }
    return self;
}

@end


  • 上面是告诉编译器按照什么方式进行归档.
  • 如何调用HOW??

//获取要保存文件的路径.并创建对应的文件,文件的后缀,越复杂越好,因为别人拿到后不会发现里面有什么
NSString *filePath = [[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject] stringByAppendingPathComponent:@"peibobo.bobo"];

//第二步---归档----------------------per要归档的对象---filePath要归档到的文件
[NSKeyedArchiver archiveRootObject:per toFile:filePath];


  • 解档
//一样获取文件
NSString *filePath = [[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject] stringByAppendingPathComponent:@"peibobo.bobo"];

//调用方法
Person *per = [NSKeyedUnarchiver unarchiveObjectWithFile:file];

注意点:

* 要归档对象要遵守NSCoding协议,实现归档解档方法.

* 获取保存的文件,要保存文件的路径

* 调用两个方法一个进行归档,一个进行解档.