iOS-NSDictionary/NSMutableDictionary新用法之“是”与”否“,开关控制器,NSUserDefaults 简单开关应用。

  iAronTalk Blog opens.

   Not matter of the today will drag tomorrow.

-=-=-=-=-=-=-=--=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-

  NSDictionary(字典)是Objective-C中用于"集合"数据,它可以将数据以键值对儿的形式储存起来,取值的时候通过KEY就可以直接拿到对应的值,非常方便。同一个词典对象中可以保存多个不同类型的数据,不像Java与C 只能保存声明的相同类型的数据。

  众所周知的NSDictionary是个承装数据的匣子,而”它“还是switch(开关),下面就让我们来看看它如何发挥自身的特性成为一个”开关“。下面通过一个例子来呈现NSDictionary的”开关“特性,需要说明的是,字典初始化NSDictionary *switchDic = [[NSDictionary alloc] init];,在不给设置初值前,字典内容为空。

  参照本文思想很多关键字都可以完成开关功能,例如NSUserDefault,相比大家都还知道每款App初次使用的动画(滑动视图),在第二次使用的App的时候不翼而飞了,该功能即可用此思想实现,请看”报道“。

  下面是例1:(应用背景:评论栏的收齐和展开)

  

#import "BaseViewController.h"

@interface TopDetailViewController : BaseViewController<UITableViewDataSource,UITableViewDelegate>

{
    UITableView *_tableView;//评论栏的表视图
    NSMutableDictionary *_foldSwitch;//定义的收齐展开开关
}
@end
@implementation TopDetailViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    _foldSwitch = [[NSMutableDictionary alloc]init];

}

#pragma mark - 选中单元格展开单元格
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    NSString *key = [NSString stringWithFormat:@"%d",indexPath.row];//把选中的单元格下标作为字典的一个key
    BOOL isShow = [[_foldSwitch objectForKey:key]boolValue];
            ;//创建的字典为空,isShow为NO.
    [_foldSwitch setObject:@(!isShow) forKey:key];//选中单元格后,改变_foldSwitch的状态,此时选中单元格下标key对应的value为:@(YES).
    //此行代码尤为重要,刷新选中的那行单元格,才会调用下面的方法。    
    [_tableView reloadRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationFade];  
}
#pragma -mark -表视图设置单元格高度调用的方法
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
    //获取当前选中的单元格下标,作为字典的key或许对应的值,由于在上一个协议方法中我们将_foldSwitch中key对应的value设为:@(YES),故此时isSshow为YES
    NSString *key = [NSString stringWithFormat:@"%i",indexPath.row];
    BOOL isShow = [[_foldSwitch objectForKey:key]boolValue];
    
    if (isShow == YES) {
    //这里填写展开的相关代码  
    }else{
    //这里填写收齐的相关代码     
    }
}

@end

  例2:(应用场景:首次使用App,开机动画的一次性显示,以后打开App,动画不在显示)

  

 1 #import "RootTabBarController.h"
 2 
 3 @implementation RootTabBarController
 4 
 5      //创建小数据的本地存储对象
 6        NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];
 7       //获取当前是否为第一次启动,若为第一次启动,firstInit为NO. 
 8       BOOL firstInit = [[userDefaults objectForKey:@"firstInit"]boolValue];
 9       if (firstInit == NO) {
10         [self _initFirstView];//加载动画方法
11           //改变firstInit的值为YES,今后不在加载动画。
12           [userDefaults setObject:@YES forKey:@"firstInit"];
13           //建议同步存储到磁盘中,但不是必须
14           [userDefaults synchronize];
15        }

  由于编者水平有限,不妥之处在所难免,恳请各个大牛批评指正,提出宝贵建议。

  版权声明:本文为博主原创文章,未经博主允许不得转载。