zoukankan      html  css  js  c++  java
  • iOS开发 文件路径保存

    OS文件本地化处理要经过三个步骤,获得文件保存路径、根据文件的属性选择对应的存档方式,存档读档的实现。

    一、获得文件保存路径

    1."应用程序包": 这里面存放的是应用程序的源文件,包括资源文件和可执行文件。

    NSString *path = [[NSBundle mainBundle] bundlePath];

    2.Documents: 最常用的目录,iTunes同步该应用时会同步此文件夹中的内容,适合存储重要数据。

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

    3.Library/Caches: iTunes不会同步此文件夹,适合存储体积大,不需要备份的非重要数据。

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

    4.tmp: iTunes不会同步此文件夹,系统可能在应用没运行时就删除该目录下的文件,所以此目录适合保存应用中的一些临时文件,用完就删除。

    NSString *path = NSTemporaryDirectory();

    5.Library/Preferences: iTunes同步该应用时会同步此文件夹中的内容,通常保存应用的设置信息

    NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];

    二:不同的文件属性需要有不同的文件保存处理方式 

    1.plist文件一般保存的文件格式

    NSArray;

    NSMutableArray;

    NSDictionary;

    NSMutableDictionary;

    NSData;

    NSMutableData;

    NSString;

    NSMutableString;

    NSNumber;

    NSDate;

    (1)获取文件保存路径

    (2)保存

    [array writeToFile:fileName atomically:YES];

    (3)读取

    NSArray *result = [NSArray arrayWithContentsOfFile:fileName];

    ( 4 )注意

    只有以上列出的类型才能使用plist文件存储。

    存储时使用writeToFile: atomically:方法。 其中atomically表示是否需要先写入一个辅助文件,再把辅助文件拷贝到目标文件地址。这是更安全的写入文件方法,一般都写YES。

    读取时使用arrayWithContentsOfFile:方法。

    2.Preference 配置文件

    (1)获得NSUserDefaults文件

    NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];

    (2)向文件中写入内容

    [userDefaults setObject:@"AAA"forKey:@"a"];

    注:[userDefaults setObject:值 forKey:关键词]

    (3)同步到配置文件里

    [userDefaults synchronize];

    (4)读取文件

    NSString *name = [userDefaults objectForKey:@“a”]; //读取配置文件中为“a”的值

    BOOL sex = [userDefaults boolForKey:@"sex"];

    注: 要使用对应的对象类型来读取 配置文件中的值,且需要用对应的方法。

    (5)注意

    偏好设置是专门用来保存应用程序的配置信息的,一般不要在偏好设置中保存其他数据。

    如果没有调用synchronize方法,系统会根据I/O情况不定时刻地保存到文件中。所以如果需要立即写入文件的就必须调用synchronize方法。

    偏好设置会将所有数据保存到同一个文件中。即preference目录下的一个以此应用包名来命名的plist文件。

    3.NSKeyedArchiver 归档

    归档在iOS中是另一种形式的序列化,只要遵循了NSCoding协议的对象都可以通过它实现序列化。由于决大多数支持存储数据的Foundation和Cocoa Touch类都遵循了NSCoding协议,因此,对于大多数类来说,归档相对而言还是比较容易实现的。

    (1)在需要归档的对象里遵守NSCoding协议,并且使用对应的方法

    在.h文件里面遵守 NSCoding 协议

    @interface Person : NSObject

    在.m文件里实现 NSCoding 协议的方法

    //归档

    - (void)encodeWithCoder:(NSCoder *)aCoder {

    [aCoder encodeObject:self.avatar forKey:@"avatar"];

    [aCoder encodeObject:self.nameforKey:@"name"];

    [aCoder encodeInteger:self.age forKey:@"age"];

    }

    //解档

    - (id)initWithCoder:(NSCoder *)aDecoder {

    if([superinit]) {

    self.avatar = [aDecoder decodeObjectForKey:@"avatar"];

    self.name= [aDecoder decodeObjectForKey:@"name"];

    self.age = [aDecoder decodeIntegerForKey:@"age"];

    }

    returnself;

    }

    注: 要归档子类,必须在实现[super encodeObject:aCoder];[super initWithCoder:aDecoder];方法

    (2)使用:

    存档使用NSKeyedArchiver中的archiveRootObject: toFile:方法

    // 1.创建文件路径

    NSString *file = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES).firstObject stringByAppendingPathComponent:@"person.data"];

    // 2.存档到文件目录下

    [NSKeyedArchiver archiveRootObject:person toFile:file];

    读档需要使用NSKeyedUnarchiver 中的  unarchiveObjectWithFile: 方法

    // 1.创建文件路径

    NSString *file = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES).firstObject stringByAppendingPathComponent:@"person.data"];

    // 2.读取文件目录下的文件

    Person *person = [NSKeyedUnarchiver unarchiveObjectWithFile:file];

    (3)注意

    必须遵循并实现NSCoding协议

    保存文件的扩展名可以任意指定

    继承时必须先调用父类的归档解档方法

  • 相关阅读:
    【SSM】Eclipse使用Maven创建Web项目+整合SSM框架(转自:http://www.cnblogs.com/DoubleEggs/p/6243216.html)
    odoo Wkhtmltopdf failed (error code: -11). Memory limit too low or maximum file number of subprocess reached. Message : b''
    odoo 补货规则,当某个位置的产品匹配到多个规则时优先使用序列号最小的规则
    odoo 销售订单确认怎么触发的发货规则
    linux 内核升级
    linux 运维工具之jumpserver
    odoo 关于odoo 的批量拣货
    JIT
    sping+redis实现消息队列的乱码问题
    JVM参数设置
  • 原文地址:https://www.cnblogs.com/jianglihui/p/5519664.html
Copyright © 2011-2022 走看看