数据存取

来源:互联网 发布:淘宝客佣金查看 编辑:程序博客网 时间:2024/04/30 11:22
沙盒:
1、主目录:

NSString *home = NSHomeDirectory()

2、文档目录:documents[0];

NSArray *documents = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);

3、缓存目录:caches[0]

NSArray *caches = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, NO);

4、临时目录:tmpDir

NSString *tmpDir = NSTemporaryDirectory();


plist的写入

NSArray *documents = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);

NSString *doc = documents[0];

NSString *path = [doc stringByAppendingPathComponent:@"array.plist"];

[array writeToFile:path atomically:YES];


图片数据的写日:

NSData *imageData = UIImagePNGRepresentation(image);

    // 2.建立保存文件的路径

    NSArray *documents = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);

    NSString *path = [documents[0] stringByAppendingPathComponent:@"image.png"];

    // 3.NSData写入文件

    [imageData writeToFile:path atomically:YES];

注意:info是写入不了的!info不都是以下数据类型的

•支持的数据类型:
Array
Dictionary
Boolean
Date
Number
String

// 1. 判断文件是否存在

    NSArray *documents = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);

    NSString *path = [documents[0] stringByAppendingPathComponent:@"image.png"];

    //注意:此处不要使用imageNamed方法,因为imageNamed方法是从bundle中加载图像的

    UIImage *image = [UIImage imageWithContentsOfFile:path];

    

    // 2.如果存在加载图像并且显示在UIImageView

    if (image != nil) {

        [imageView setImage:image];

    }



Archiver & Unarchiver归档和恢复
遵守<NSCoding>协议
实现方法:

// 归档(序列化/编码)_是在保存数据时使用的

- (void)encodeWithCoder:(NSCoder *)aCoder

// 恢复(反序列化)_是在恢复数据时使用的

- (id)initWithCoder:(NSCoder *)aDecoder


•NSString、NSDictionary、NSArray、NSData、NSNumber等类型的对象,可以直接用NSKeyedArchiver进行归档和恢复

•[NSKeyedArchiver archiveRootObject:toFile:]

会首先调用被归档类对象的encodeWithCoder方法对该对象的属性编码,然后再写入文件进行归档

•[NSKeyedUnarchiver unarchiveObjectWithFile:path]

从文件加载数据后,会调用类的initWithCoder方法,实例化该类对象,并恢复属性


•如果父类也遵守了NSCoding协议,需要注意:
•在encodeWithCoder:方法中加上一句

[super encodeWithCoder:aCoder];

确保继承的实例变量也能被编码,即也能被归档

•在initWithCoder:方法中加上一句

self = [superinitWithCoder:aDecoder];

确保继承的实例变量也能被解码,即也能被恢复


NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];

 //TODO:......  

// 如果,对于某些需要保存在偏好设置中的数据,要求实时的响应,需要在保存系统偏好设置时,调用一个同步方法

[defaults synchronize];


0 0
原创粉丝点击