豆瓣收藏的功能封装

1.判断活动是否收藏过(使用时最号用一个属性保存返回值,方便之后操作)

// 判断活动是否收藏过
+ (BOOL)isActivityInPlist:(Activity *)activity;

1.先将文件反归档  2.之后判断数组是否是空,如果是空返回NO  3.之后遍历数组,判断是否有元素,如果有返回YES,没有返回NO

+ (BOOL)isActivityInPlist:(Activity *)activity{
    NSString *sandBoxPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, 1, YES) lastObject];
    NSString *docPath = [sandBoxPath stringByAppendingPathComponent:@"activity.plist"];
    // 反归档,判断是否收藏
    NSArray *actArr = [NSKeyedUnarchiver unarchiveObjectWithFile:docPath];
    if (actArr == nil) {
        return NO;
    } else {
        for (Activity *temp in actArr) {
            if ([temp.activityId isEqualToString:activity.activityId]) {
                return YES;
            }
        }
        return NO;
    }
}

 self.isSave = [SaveTool isActivityInPlist:self.activity];
    
      // 根据收藏的状态改变button按钮
    if (self.isSave) {
        [button setTitle:@"已收藏" forState:UIControlStateNormal];
    } else {
        [button setTitle:@"收藏" forState:UIControlStateNormal];
    }
    
    self.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc] initWithCustomView:button];
    self.title = self.activity.title;
    NSLog(@"%@", self.activity.activityId);


2.归档:为了防止原来的数据被覆盖掉,所以一般先把数据进行反归档,把数据读出来之后,新数据加进去,在进行归档

两种情况:1.数组为空的时候,需要初始化数组 2.在读出来的数组中增加元素,归档

+ (void)saveActivityInPlist:(Activity *)activity{
    // 为了防止原来的数据被覆盖掉,所以一般先把数据进行反归档,把数据读出来之后,新数据加进去,在进行归档
    NSString *sandBoxPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, 1, YES) lastObject];
    NSString *docPath = [sandBoxPath stringByAppendingPathComponent:@"activity.plist"];
    
    NSMutableArray *arr = [NSKeyedUnarchiver unarchiveObjectWithFile:docPath];
    // 有两种情况,第一种,数组为空,需要初始化一个数组
    if (arr == nil) {
        arr = [NSMutableArray array];
    }
    // 如果加了else,空数组就不会添加元素
    [arr addObject:activity];
    // 归档
    [NSKeyedArchiver archiveRootObject:arr toFile:docPath];
}

封装一个函数,实现收藏和取消收藏的功能(需要在函数中传一个状态,判断是收藏还是取消收藏的功能)

1.如果状态是NO,归档收藏   2.如果不是,取消收藏.需要遍历找到元素,然后删除,之后归档

+ (void)saveActivityOrCancel:(Activity *)activity state:(BOOL)state{
    // 根据传过来的布尔判断当前的操作
    if (state == NO) {
        // 归档收藏
        [SaveTool saveActivityInPlist:activity];
    } else {
        // 删除,取消收藏
        // 删除
        NSString *sandBoxPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, 1, YES) lastObject];
        NSString *docPath = [sandBoxPath stringByAppendingPathComponent:@"activity.plist"];
        // 反归档
        NSMutableArray *arr = [NSKeyedUnarchiver unarchiveObjectWithFile:docPath];
        // 不需要判断
        // 遍历找到元素,不遍历找不到元素
        for (Activity *temp in arr) {
            if ([temp.activityId isEqualToString:activity.activityId]) {
                [arr removeObject:temp];
                break;
            }
        }
        [NSKeyedArchiver archiveRootObject:arr toFile:docPath];
    }
}

 [SaveTool saveActivityOrCancel:self.activity state:self.isSave];
    if (self.isSave) {
        [button setTitle:@"收藏" forState:UIControlStateNormal];
    } else {
        [button setTitle:@"已收藏" forState:UIControlStateNormal];
    }
    // 最后对状态进行取反
    self.isSave = !self.isSave;

查找收藏详情(返回一个数组,不需要传参数)

+ (NSMutableArray *)searchAcitivityInPlist{
     NSString *sandBoxPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, 1, YES) lastObject];
     NSString *docPath = [sandBoxPath stringByAppendingPathComponent:@"activity.plist"];
     NSMutableArray *arr = [NSKeyedUnarchiver unarchiveObjectWithFile:docPath];
    return arr;
}

因为需要刷新数据,对数据进行实时的更新,所以要把方法写在viewWillAppear里

// 重写这个方法,完成实时的更新数据
- (void)viewWillAppear:(BOOL)animated{
    [super viewWillAppear:animated];
    // 这个要再这里写,cell是最后执行的函数
    self.arr = [SaveTool searchAcitivityInPlist];
    [self.tableView reloadData];
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值