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        }

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

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

时间: 2024-12-09 21:14:21

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

NSDictionary/NSMutableDictionary

NSDictionary/NSMutableDictionary 特点: (1)里存储的东西都是键值对 (2)可以像数组一样快速创建(适用 NSDictionary):@{key1 : value1, (3)快速访问元素:字典名 [key] 比如可以这样为指定 key 赋值: dic [@"key1"] = @"value1"; 快速获取 key 所对应的 value: key2 : value2} NSString *name = dic[@"name&

NSDictionary , NSMutableDictionary, NSMutableDictionary 和 NSMutableSet)相当于java的map、set

1 NSDictionary 和 NSMutableDictionary NSDictionary  :就是java中的map; 放入对象是键值对 key-value  , 同样 秉持了一样的原则,只能放入对象,不可本体增删改; (1)初始化方法 + dictionaryWithObject:forKey: + dictionaryWithObjects:forKeys: + dictionaryWithObjectsAndKeys: 这三个是最常用的吧,注意是对象在前,key在后 2 访问 k

OC -- NSDictionary NSMutableDictionary

NSDictionary  NSMutableDictionary 只能存放OC对象,不能存放int, float, double, struct, enum类型数据 NSDictionary *dict1 = @{@"name" : @"As god name", @"address" : @"shanghai", @"program" : @"ios"}; NSDictionary

ios给NSMutableDictionary循环赋值的两种方式,在循环内初始化NSMutableDictionary和在循环外初始化NSMutableDictionary有何区别?(已解决)

NSMutableArray * arrayName = [NSMutableArray array]; NSMutableArray * array = [NSMutableArray array]; [array removeAllObjects]; for (int i = 0; i< 10; i++) { NSString * str = [NSString stringWithFormat:@"name%i",i]; [arrayName addObject:str];

关于NSString,NSMutableString,NSArray,NSMutableArray,NSDictionary,NSMutableDictionary

NSString,NSMutableString,NSArray,NSMutableArray,NSDictionary,NSMutableDictionary 在 OC 中我们天天都要用,而我们要怎么学习它们呢? 我认为学习这些常用的类,使用类比的方法就行了,只要学会一个类,就能类比另外两个类了.. 比如,NSString和NSMutableString的可变与不可变,主要区分的标准是,它们本身是不是可以变,可变的一般都能增,删,改,而不可变的方法主要是创建,查看,得到元素个数或者长度等等;

NSString,NSMutableString, NSArray ,NSMutableArray,NSDictionary,NSMutableDictionary 深拷贝,浅拷贝分析

NSString,NSMutableString, NSArray ,NSMutableArray,NSDictionary,NSMutableDictionary 深拷贝,浅拷贝. 首先我们得知道什么是深拷贝,什么事浅拷贝. 简单点说深拷贝就是拷贝内容,浅拷贝就是拷贝指针. 上面那些类我们可以这样理解他们的深.浅拷贝.只要上面那些类中的NSString,NSArray,NSDictionary这三个类的实例化对象是调用copy方法进行拷贝那么他们拷贝的就是一个指针,就是说他们只是拷贝了一个指向

iOS多线程技术—NSOperation用法

iOS多线程技术—NSOperation用法 一.NSOperation简介 1.简单说明 NSOperation的作?:配合使用NSOperation和NSOperationQueue也能实现多线程编程 NSOperation和NSOperationQueue实现多线程的具体步骤: (1)先将需要执行的操作封装到一个NSOperation对象中 (2)然后将NSOperation对象添加到NSOperationQueue中 (3)系统会?动将NSOperationQueue中的NSOperat

在WWDC 2014上,没提到的iOS 8 八大新特性

title: The following iterative sequence is defined for the set of positive integers: n n/2 (n is even) n 3n + 1 (n is odd) Using the rule above and starting with 13, we generate the following sequence: 13 40 20 10 5 16 8 4 2 1 It can be seen that thi

WWDC三大看点:Mac新系统Yosemite、iOS 8及新编程语言Swift

导语:苹果公司专门针对开发人员公布全新的 Swift 编程语言以及新版的 Xcode,苹果公司称其拥有"快速.现代.安全.互动"等特性 苹果在今年的 WWDC 开发者大会上发布了新版 Mac OS X 系统及 iOS 系统,带来多项改进或体验优化.本次大会是苹果第 25 届开发者大会,苹果注册开发者已达 900 万名. 据苹果 CEO 库克介绍,全球 PC 行业下滑5% 的情况下,苹果 Mac 却实现了 12% 的增长,总装机量达到 8000 万台,而最新一代操作系统 Maverick