从零开始学习iOS开发-股票记帐本1.0(2)

4. 数据持久化

定义一个NsMutable *Data来存储数据,在这个App中使用属性文件进行数据持久话。具体的数据持久化代码如下

-(id)init{
    //当应用从storyboard中加在视图控制器时,uikit将会自动触发该方法
    if ((self=[super init])) {
        [self loadData];
    }
    return self;
}
#pragma mark 数据加载和保存
- (NSString *)documentsDirectory{
    NSArray *path=NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);//NSDocumentDirectory表明查找Documents目录的路径,NSUserDomainMask表明讲搜素限制在应用的沙盒内
    NSString *documentsDirectory=path[0];//每个应用只有一个Documents目录
    return documentsDirectory;
}

- (NSString *)dataFilePath{
    //创建到plist的完整路径
    return [[self documentsDirectory]stringByAppendingPathComponent:@"data.plist"];
}

- (void)saveData{
    NSMutableData *data=[[NSMutableData alloc]init];
    NSKeyedArchiver *archiver=[[NSKeyedArchiver alloc]initForWritingWithMutableData:data];
    [archiver encodeObject:self.Data forKey:@"data"];//_局部变量,self属性
    [archiver finishEncoding];
    [data writeToFile:[self dataFilePath] atomically:YES];
    //获取sellData数组中的内容,然后分两步讲它转换成二进制数据块,然后写进到文件中,chapter13p5


}
- (void) loadData{
    NSString *path=[self dataFilePath];
    //检查沙盒中是否存在该文件
    if ([[NSFileManager defaultManager]fileExistsAtPath:path]) {
        //当应用从沙河中找到path.plist文件时,我们无需创建一个新的数组,可以从该文件中加载整个数组和其中内容(savechecklistitem的逆向操作)
        NSData *data=[[NSData alloc]initWithContentsOfFile:path];//将文件内容加载到nsdata对象中
        NSKeyedUnarchiver *unarchiver=[[NSKeyedUnarchiver alloc]initForReadingWithData:data];//创建一个nskeyedunarchiver对象
        self.Data=[unarchiver decodeObjectForKey:@"data"];
        [unarchiver finishDecoding];
    }else{
        self.Data=[[NSMutableArray alloc]initWithCapacity:100];
    }
}
5. 数据的加载和保存

4中只负责数据的持久化,此外还需要对数据进行保存和加载,这个过程在stockData.h和.m文件中进行,一下罗列主要代码
.h文件

@interface stockData : NSObject<NSCoding>

@property (strong, nonatomic) NSMutableArray *sellData;

.m文件

- (id)init{
    //当用户添加一个新的stockdata到应用中时会调用常规init方法
    if ((self=[super init])) {
        self.sellData=[[NSMutableArray alloc]initWithCapacity:20];
    }
    return self;
}

- (id)initWithCoder:(NSCoder *)aDecoder{
    //加载
    if ((self=[super init])) {
        self.sellData=[aDecoder decodeObjectForKey:@"SellData"];  
    }
    return self;
}

- (void)encodeWithCoder:(NSCoder *)aCoder{
    //保存
    [aCoder encodeObject:self.sellData forKey:@"SellData"];
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值