IOS开发指南读书笔记10(IOS数据持久层的建立2)

原创 2015年11月18日 11:40:10
IOS开发指南读书笔记10(IOS数据持久层的建立2)
基于对象归档的实现
建立对象归档数据管理类

实现归档数据持久的对象实现NSCoding协议
其属性也必须是基本类型或者实现NSCoding协议的对象
我们堆Note做如下更改添加这两个方法

-(void)encodeWithCoder:(NSCoder *)aCoder

{

    //编码

    [aCoder encodeObject:[NSNumber numberWithInteger:_IDforKey:@"ID"];

    [aCoder encodeObject:_content forKey:@"content"];

}


-(id)initWithCoder:(NSCoder *)aDecoder

{

    self = [super init];

    if (self) {

        //解码

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

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

    }

    return self;

}



//归档数据管理
@interface ArchiveNoteDao : NSObject<BaseNoteDao>
 
#define ARCHIVE_KEY @"Notes"
 
@ end

具体实现

@implementation ArchiveNoteDao

+(id)sharedManager

{

    static dispatch_once_t onceToken;

    __block ArchiveNoteDao* instance = nil;

    dispatch_once(&onceToken, ^{

        instance = [[ArchiveNoteDao alloc]init];

        [instance createObjectCacheFile];

    });

    return instance;

}


-(void)createObjectCacheFile

{

    NSFileManager* fileManager = [NSFileManager defaultManager];

    NSString* objectDataFilePath = [self ObjectCacheFilePath];

    BOOL exist = [fileManager fileExistsAtPath:objectDataFilePath];

    if (!exist) {

        //添加一条伪数据

        Note* note = [[Note alloc]init];

        note.ID = 0;

        note.content = @"今天天气晴转阴";

        NSMutableArray* array = [@[note] mutableCopy];

        //保存数组

        [self saveWtihArray:array];

    }

}


//根据数组保存到归档文件

-(void)saveWtihArray:(NSMutableArray*)array

{

    NSString* objectDataFilePath = [self ObjectCacheFilePath];

    NSMutableData* theData = [NSMutableData data];

    NSKeyedArchiver* archiver = [[NSKeyedArchiver alloc]initForWritingWithMutableData:theData];

    [archiver encodeObject:array forKey:ARCHIVE_KEY];

    [archiver finishEncoding];

    [theData writeToFile:objectDataFilePath atomically:YES];

}


-(NSString *)ObjectCacheFilePath

{

    NSString* documentDirectory = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectoryNSUserDomainMaskYESlastObject];

    return [documentDirectory stringByAppendingPathComponent:@"Notes.archive"];

}


-(void)addNote:(Note *)note

{

    NSMutableArray* datas = [self queryAllNote];

    [datas addObject:note];

    [self saveWtihArray:datas];

}


-(void)removeNote:(Note *)note

{

    NSMutableArray* datas = [self queryAllNote];

    for (Note* sNote in datas) {

        if (sNote.ID == note.ID) {

            [datas removeObject:sNote];

            [self saveWtihArray:datas];

            break;

        }

    }

}


-(void)modify:(Note *)note

{

    NSMutableArray* datas = [self queryAllNote];

    for (Note* sNote in datas) {

        if (sNote.ID == note.ID) {

            [sNote modifyWithOther:note];

            [self saveWtihArray:datas];

            break;

        }

    }

}


-(NSMutableArray*)queryAllNote

{

    NSString* objectDataFilePath = [self ObjectCacheFilePath];

    NSMutableArray* datas = [[NSMutableArray alloc]init];

    NSData* archiveData = [NSData dataWithContentsOfFile:objectDataFilePath];

    if ([archiveData length] > 0) {

        //反归档

        NSKeyedUnarchiver* unArchiver = [[NSKeyedUnarchiver alloc]initForReadingWithData:archiveData];

        datas =  [unArchiver decodeObjectForKey:ARCHIVE_KEY];

        [unArchiver finishDecoding];

    }

    return datas;

}


-(Note*)queryNoteByID:(NSInteger)ID

{

    NSMutableArray* datas = [self queryAllNote];

    for (Note* sNote in datas) {

        if (sNote.ID == ID) {

            return sNote;

        }

    }

    return nil;

}


@end 

iOS开发保持用户登录状态-NSUserDefault实现数据持久化

iOS:开发第一步,却是要登陆
  • SYH523364
  • SYH523364
  • 2016年03月28日 14:19
  • 1102

《数据仓库工具箱:维度建模的完全指南》笔记总结

此篇是关于本书的读书笔记总结,因为在这方面的理解还是比较初级的状态,有误之处还望指教。   个人认为这本书对于数据仓库的建模思路有一个很明确的描述:围绕事实表建立维度表。对数据仓库的建设有关键步骤...
  • linpingta
  • linpingta
  • 2014年01月01日 22:06
  • 2373

iOS之数据的存储(数据持久化)

所谓的持久化,就是将数据保存到硬盘中,使得在应用程序或机器重启后可以继续访问之前保存的数据。其实储存的形式无非就这么几种,而我们还必须要关心的是,这些文件会被放置在那个文件下,然后如何读取。 也就是...
  • Zhi_Sheng
  • Zhi_Sheng
  • 2016年04月28日 16:51
  • 1642

IOS开发指南读书笔记12(IOS数据持久层的建立4)

IOS开发指南读书笔记12(IOS数据持久层的建立4)  建立CoreData需要首先建立一个模型文件 生成的后缀是xcdatamodeid,但是编译之后在沙盒的momd文件 首先A...
  • hahahakonghee
  • hahahakonghee
  • 2015年11月18日 11:42
  • 594

OS开发指南读书笔记9(IOS数据持久层的建立1)

IOS开发指南读书笔记9(IOS数据持久层的建立1)  建立IOS数据持久层,有以下几个方式 1、文本文件 plist/Xml/Json/NSUserDefault(等同于plist) 2、...
  • hahahakonghee
  • hahahakonghee
  • 2015年11月18日 11:39
  • 385

12-读书笔记----iOS开发指南:从零基础到App Store上架--iOS-数据持久化

iOS-国际化
  • blacet
  • blacet
  • 2016年05月13日 10:32
  • 349

IOS开发指南读书笔记8(AutoLayout) 2

IOS开发指南读书笔记8(AutoLayout) 其原理类似Android的RelativeLayout,适用于IOS6以上。如果不同约束有冲突,回遵循优先级的高的约束。 一、可以...
  • hahahakonghee
  • hahahakonghee
  • 2015年11月18日 11:38
  • 381

IOS开发指南读书笔记2(应用程序的生命周期)

1、程序的五种状态 Not Running:未运行。 Inactive:前台非活动状态。处于前台,但是不能接受事件处理。 Active:前台活动状态。处于前台,能接受事件处理。 Backgro...
  • hahahakonghee
  • hahahakonghee
  • 2015年11月18日 11:33
  • 442

2-读书笔记----iOS开发指南:从零基础到App Store上架--iOS视图和控件

视图和控件 UIView“家族” UIView类的继承层次 应用界面的构建层次 iOS应用界面是由若干个视图构建而成的,这些视图对象采用树形构建 视图分类 为了便于开发,苹果将UIKi...
  • blacet
  • blacet
  • 2015年11月20日 00:12
  • 728

IOS开发指南读书笔记1(Xcode的基本使用)

IOS开发指南读书笔记1(Xcode的基本使用) 1、用Xcode创建工程 Product Name:工程名字 Organization Name:组织名字 Company Identifier:...
  • hahahakonghee
  • hahahakonghee
  • 2015年11月18日 11:32
  • 422
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:IOS开发指南读书笔记10(IOS数据持久层的建立2)
举报原因:
原因补充:

(最多只允许输入30个字)