Dictionary  写入:

if ([self.currentUserAccount length] > 0) {
                
                KeychainItemWrapper *keychainItem = [[KeychainItemWrapper alloc]initWithIdentifier:@"useraccount" accessGroup:nil];
                if (keychainItem) {
                    
                    if ([[keychainItem objectForKey:kSecAttrAccount] length ] > 0) {
                        
                        //already has data
                        
                        NSMutableArray *accountArray = [[keychainItem objectForKey:kSecAttrAccount] propertyList];
                        if (accountArray && [accountArray isKindOfClass:[NSMutableArray class]] && [accountArray count] > 0)
                        {
                            //just store the different user account
                            //NSUInteger indexOfTheObject = [accountArray indexOfObject: self.currentUserAccount];
                            //if (indexOfTheObject > [accountArray count]) {
                            
                            [accountArray addObject:self.currentUserAccount];
                            [keychainItem setObject:[accountArray description] forKey:(id)kSecAttrAccount];
                            
                            //}
                            for (int index = 0; index < [accountArray count]; index ++) {
                                
                                NSLog(@"the value is %@",[accountArray objectAtIndex:index]);
                            }
                        }
                        
                    }else{
                        
                        //has no data
                        NSMutableArray *accountArray = [NSMutableArray arrayWithObject:self.currentUserAccount];
                        [keychainItem setObject:[accountArray description] forKey:(id)kSecAttrAccount];
                        
                    }
                }
            }

Dictionary  读取:

KeychainItemWrapper *tokenKeychainItem = [[[KeychainItemWrapper alloc]initWithIdentifier:@"UserAuthToken" accessGroup:nil]autorelease];
    if (tokenKeychainItem && [[tokenKeychainItem objectForKey:kSecValueData] length ] > 0) {
        
        //[tokenKeychainItem resetKeychainItem];
        
        NSMutableDictionary *dictionary = [[tokenKeychainItem objectForKey:kSecValueData] propertyList];
        
        if (dictionary && [dictionary isKindOfClass:[NSMutableDictionary class]] && [dictionary count] > 0) {
            
            self.tokenValue = [dictionary valueForKey:@"token"];
            //push the view
            SelectChildViewController* pushView = [[SelectChildViewController alloc]init];
            [pushView setTokenValue:self.tokenValue];
            [self.navigationController pushViewController:pushView animated:YES];
            [pushView release];
        }
        ((KidsAppDelegate*)[[UIApplication sharedApplication]delegate]).loginToken = self.tokenValue;
        
        
        //[tokenKeychainItem resetKeychainItem];
        //has token
        /*LoginManager *tmp = [[LoginManager alloc]initWithUserName:@"" withPassword:@""withToken:self.tokenValue];
         self.login = tmp;
         [tmp release];
         [self.login doLogin];*/
        
        
    }

Array 写入:

if ([self.currentUserAccount length] > 0) {
                
                KeychainItemWrapper *keychainItem = [[KeychainItemWrapper alloc]initWithIdentifier:@"useraccount" accessGroup:nil];
                if (keychainItem) {
                    
                    if ([[keychainItem objectForKey:kSecAttrAccount] length ] > 0) {
                        
                        //already has data
                        
                        NSMutableArray *accountArray = [[keychainItem objectForKey:kSecAttrAccount] propertyList];
                        if (accountArray && [accountArray isKindOfClass:[NSMutableArray class]] && [accountArray count] > 0)
                        {
                            //just store the different user account
                            //NSUInteger indexOfTheObject = [accountArray indexOfObject: self.currentUserAccount];
                            //if (indexOfTheObject > [accountArray count]) {
                            
                            [accountArray addObject:self.currentUserAccount];
                            [keychainItem setObject:[accountArray description] forKey:(id)kSecAttrAccount];
                            
                            //}
                            for (int index = 0; index < [accountArray count]; index ++) {
                                
                                NSLog(@"the value is %@",[accountArray objectAtIndex:index]);
                            }
                        }
                        
                    }else{
                        
                        //has no data
                        NSMutableArray *accountArray = [NSMutableArray arrayWithObject:self.currentUserAccount];
                        [keychainItem setObject:[accountArray description] forKey:(id)kSecAttrAccount];
                        
                    }
                }
            }

Array 读取:

KeychainItemWrapper *keychainItem = [[KeychainItemWrapper alloc]initWithIdentifier:@"useraccount" accessGroup:nil];
    self.accountArray = [NSMutableArray array];
    self.lastTimeAccount = @"";
    
    if (keychainItem) {
        
        //[keychainItem resetKeychainItem];
        //first get the old token if found delete //kSecValueData
        if ([[keychainItem objectForKey:kSecAttrAccount] length ] > 0) {
            
            NSMutableArray *orignalArray = [[keychainItem objectForKey:kSecAttrAccount] propertyList];
            
            if (orignalArray && [orignalArray isKindOfClass:[NSMutableArray class]] && [orignalArray count] > 0)
            {
                //move the repeated item
                NSInteger index = [orignalArray count] - 1;
                for (id object in [orignalArray reverseObjectEnumerator]) {
                    if ([orignalArray indexOfObject:object inRange:NSMakeRange(0, index)] != NSNotFound) {
                        [orignalArray removeObjectAtIndex:index];
                    }
                    index--;
                }
            }
            self.accountArray = orignalArray;
            if ([self.accountArray count] > 0) {
                
                //self.lastTimeAccount = [self.accountArray objectAtIndex:[self.accountArray count] - 1];
                self.switchBtn.hidden = NO;
                
            }
            
        }
        [keychainItem release];
    }

ios 使用keychain具体方法的更多相关文章

  1. iOS-提高iOS开发效率的方法和工具

    提高iOS开发效率的方法和工具 介绍 这篇文章主要是介绍一下我在iOS开发中使用到的一些可以提升开发效率的方法和工具. IDE 首先要说的肯定是IDE了,说到IDE,Xcode不能跑,当然你也可能同时 ...

  2. iOS中的过期方法和新的替代方法

    关于iOS中的过期方法和新的替代方法 1.获取某些类的UINavigationBar的统一外观并设置UINavigationbar的背景 注:方法名改了但是基本使用方法不变 + (instancety ...

  3. opencv直线检测在c#、Android和ios下的实现方法

    opencv直线检测在c#.Android和ios下的实现方法 本文为作者原创,未经允许,不得转载 :原文由作者发表在博客园:http://www.cnblogs.com/panxiaochun/p/ ...

  4. iOS 使用Keychain 保存 用户名和密码到 本地

    iOS 使用Keychain 保存 用户名和密码到 本地 之前曾把一些简单的数据保存在了plist,文件,及NsuserDefault里面, 但是如果要保存密码之类的,保存在本地就很不安全了: 但是利 ...

  5. iOS开发——实用篇&提高iOS开发效率的方法和工具

    提高iOS开发效率的方法和工具 介绍 这篇文章主要是介绍一下我在iOS开发中使用到的一些可以提升开发效率的方法和工具. IDE 首先要说的肯定是IDE了,说到IDE,Xcode不能跑,当然你也可能同时 ...

  6. iOS与HTML5交互方法总结(转)

    今天小编在找技术文章的时候,发现这样一个标题:iOS与HTML5交互方法总结,怎么看着这么熟悉呢?   还以为是刚哥用了别的文章,点进去一看,原来是刚哥自己写的文章,他们转载的,而且还上了Dev St ...

  7. iOS UISearchController 的使用方法

    iOS UISearchController 的使用方法 UISearchController 让用户在 UISearchBar 上输入搜索关键词,展示搜索结果或者进行其他操作.UISearchCon ...

  8. IOS常见的加密方法,常用的MD5和Base64

    iOS代码加密常用加密方式 iOS代码加密常用加密方式,常见的iOS代码加密常用加密方式算法包括MD5加密.AES加密.BASE64加密,三大算法iOS代码加密是如何进行加密的,且看下文 MD5 iO ...

  9. iOS运用keychain 把identifierForVendor当成唯一标识。替换advertisingIdentifier

    iOS运用keychain 结合[[[UIDevice currentDevice] identifierForVendor] UUIDString] 取得设备唯一标识 NSString *ident ...

随机推荐

  1. SPOJ QTREE4 - Query on a tree IV 树分治

    题意: 给出一棵边带权的树,初始树上所有节点都是白色. 有两种操作: C x,改变节点x的颜色,即白变黑,黑变白 A,询问树中最远的两个白色节点的距离,这两个白色节点可以重合(此时距离为0). 分析: ...

  2. 大数据学习——KETTLE入门学习——kettle安装

    https://blog.csdn.net/u012637358/article/details/82593492 下载的kettle是汉化的 改成英文的 工具——选项——选择英文

  3. dev c++ 提示没有iostream.h文件

    dev c++ 提示没有iostream.h文件 解决办法路径没有打通最好是这样写:#include <iostream>using namespace std;int main(int ...

  4. [linx学习篇] ssh远程服务器免密码

    第一步:生成密钥.在终端下执行命令: ssh-keygen -t rsa 一路回车,各种提示按默认不要改,等待执行完毕.然后执行: ls ~/.ssh #可以看到两个密钥文件:id_rsa(私钥) i ...

  5. codeM预赛

    [编程|1000分] 音乐研究 时间限制:1秒空间限制:32768K 题目描述 美团外卖的品牌代言人袋鼠先生最近正在进行音乐研究.他有两段音频,每段音频是一个表示音高的序列.现在袋鼠先生想要在第二段音 ...

  6. List容器——ArrayList及常用API

    List: ①   List容器是有序的collection(也称为序列).此接口的用户可以对List容器中每个元素的插入位置进行精确地控制.用户可以根据元素的整数索引(在列表中的位置)访问元素,并搜 ...

  7. 将模型储存到本地-FastCoder

    // // ViewController.m // 模型转data储存 // // Created by 谭启宏 on 16/3/4. // Copyright © 2016年 tqh. All ri ...

  8. 刷题总结——旅馆(bzoj1593线段树)

    题目: Description 奶牛们最近的旅游计划,是到苏必利尔湖畔,享受那里的湖光山色,以及明媚的阳光.作为整个旅游的策划者和负责人,贝茜选择在湖边的一家著名的旅馆住宿.这个巨大的旅馆一共有N ( ...

  9. 2017.8.2 Noip2018模拟测试赛(十八)

     日期: 八月二日  总分: 300分  难度: 提高 ~ 省选  得分: 40分(又炸蛋了!!) 题目列表: T1:分手是祝愿 T2:残缺的字符串 T3:树点涂色 赛后心得: 哎,T1求期望,放弃. ...

  10. php validator classes

    <?php /** * 验证类 */ class Validator { /* 函数名称:isNumber 简要描述:检查输入的是否为数字 输入:string 输出:boolean */ pub ...