ios数据初级持久化 存储复杂对象

来源:互联网 发布:手机打网络电话软件 编辑:程序博客网 时间:2024/06/05 12:03

1.如何创建文件夹 管理文件夹 需要使用 NSFileManager 这个单例类

// withIntermediateDirectories 如果填YES,如果创建的文件已经存在,可以将其覆盖,反之文件创建失败    BOOL isCreated = [[NSFileManager defaultManager] createDirectoryAtPath:path withIntermediateDirectories:YES attributes:nil error:nil];

移动文件夹的方法, 参数是两个路径 ,将就路径中的文件夹移到新路径中

BOOL isMoved = [[NSFileManager defaultManager] moveItemAtPath:oldPath toPath:newPath error:nil];

复制文件夹


BOOL isCopy = [[NSFileManager defaultManager] copyItemAtPath:oldPath toPath:newPath error:nil];

删除文件夹


BOOL isDelete = [[NSFileManager defaultManager] removeItemAtPath:newPath error:nil];

判断文件夹是否存在

BOOL isExist = [[NSFileManager defaultManager] isExecutableFileAtPath:oldPath];

 复杂对象初始化需要遵守一个协议 <NSCoding>

然后实现协议中的方法

// 对复杂对象进行持久化 叫做归档与反归档(编码与解码)// 反归档方法- (id)initWithCoder:(NSCoder *)aDecoder{    self = [super init];    if (self) {    // 解码的过程    // 注意编码时的Key要和解码的Key一样    self.name = [aDecoder decodeObjectForKey:@"name"];    self.age = [aDecoder decodeIntegerForKey:@"age"];    self.data = [aDecoder decodeObjectForKey:@"data"];    }    return self;}// 归档方法 编码成可以持久化的格式- (void)encodeWithCoder:(NSCoder *)aCoder{    // 对每一个属性 都进行重新编码    // 注意属性类型    [aCoder encodeObject:self.name forKey:@"name"];    [aCoder encodeInteger:self.age forKey:@"age"];    [aCoder encodeObject:self.data forKey:@"data"];} 
// 归档复杂对象- (void)archiver{    // 归档前要初始化对象    JJModel *model = [[JJModel alloc] init];    // 赋值    model.name = @"JJ";    model.age = 23;    // 弄一张图片给图片    model.data = UIImagePNGRepresentation([UIImage imageNamed:@"河图"]);        // 创建一个归档对象    NSMutableData *data = [NSMutableData data];    NSKeyedArchiver *archiver = [[NSKeyedArchiver alloc] initForWritingWithMutableData:data];        // 进行编码归档    [archiver encodeObject:model forKey:@"JJModel"];    // 编码完成    [archiver finishEncoding];    // NSLog(@"%@", data);    // 实际上把编码完的对象保存到data中    // 把data 写入文件, 就算完成了持久化    // 写好路径, 调写入方法    NSString *oldPath = [NSString stringWithFormat:@"%@/JJModel.da", kDocumentPath];    [data writeToFile:oldPath atomically:YES];    [model release];    [archiver release];}// 反归档(解码)- (void)unArchiver{    NSString *oldPath = [NSString stringWithFormat:@"%@/JJModel.da", kDocumentPath];    // 获取刚才归档的data    NSData *data = [NSData dataWithContentsOfFile:oldPath];        NSKeyedUnarchiver *unArchiver = [[NSKeyedUnarchiver alloc] initForReadingWithData:data];    // 进行解码 返回一个对象  key 一定要和 编码时的key 一样    JJModel *model = [unArchiver decodeObjectForKey:@"JJModel"];    // 反归档完成    [unArchiver finishDecoding];    [unArchiver release];        // UIImage *image = [UIImage imageWithData:model.data];    NSLog(@"%@", model);}







0 0