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];
}