ios 使用keychain具体方法
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具体方法的更多相关文章
- iOS-提高iOS开发效率的方法和工具
提高iOS开发效率的方法和工具 介绍 这篇文章主要是介绍一下我在iOS开发中使用到的一些可以提升开发效率的方法和工具. IDE 首先要说的肯定是IDE了,说到IDE,Xcode不能跑,当然你也可能同时 ...
- iOS中的过期方法和新的替代方法
关于iOS中的过期方法和新的替代方法 1.获取某些类的UINavigationBar的统一外观并设置UINavigationbar的背景 注:方法名改了但是基本使用方法不变 + (instancety ...
- opencv直线检测在c#、Android和ios下的实现方法
opencv直线检测在c#.Android和ios下的实现方法 本文为作者原创,未经允许,不得转载 :原文由作者发表在博客园:http://www.cnblogs.com/panxiaochun/p/ ...
- iOS 使用Keychain 保存 用户名和密码到 本地
iOS 使用Keychain 保存 用户名和密码到 本地 之前曾把一些简单的数据保存在了plist,文件,及NsuserDefault里面, 但是如果要保存密码之类的,保存在本地就很不安全了: 但是利 ...
- iOS开发——实用篇&提高iOS开发效率的方法和工具
提高iOS开发效率的方法和工具 介绍 这篇文章主要是介绍一下我在iOS开发中使用到的一些可以提升开发效率的方法和工具. IDE 首先要说的肯定是IDE了,说到IDE,Xcode不能跑,当然你也可能同时 ...
- iOS与HTML5交互方法总结(转)
今天小编在找技术文章的时候,发现这样一个标题:iOS与HTML5交互方法总结,怎么看着这么熟悉呢? 还以为是刚哥用了别的文章,点进去一看,原来是刚哥自己写的文章,他们转载的,而且还上了Dev St ...
- iOS UISearchController 的使用方法
iOS UISearchController 的使用方法 UISearchController 让用户在 UISearchBar 上输入搜索关键词,展示搜索结果或者进行其他操作.UISearchCon ...
- IOS常见的加密方法,常用的MD5和Base64
iOS代码加密常用加密方式 iOS代码加密常用加密方式,常见的iOS代码加密常用加密方式算法包括MD5加密.AES加密.BASE64加密,三大算法iOS代码加密是如何进行加密的,且看下文 MD5 iO ...
- iOS运用keychain 把identifierForVendor当成唯一标识。替换advertisingIdentifier
iOS运用keychain 结合[[[UIDevice currentDevice] identifierForVendor] UUIDString] 取得设备唯一标识 NSString *ident ...
随机推荐
- 面试(手打手写,待更新loading...)
1)JAVA基础面试 1,引用数据类型和基本数据类型的区别是什么? Byte 1 short 2 int 4 long 8 Boolean 1 char 2 float 4 double 8. 基本数 ...
- Linux学习-函式库管理
动态与静态函式库 首先我们要知道的是,函式库的类型有哪些?依据函式库被使用的类型而分为两大类,分别是静态 (Static) 与动态 (Dynamic) 函式库两类. 静态函式库的特色: 扩展名:(扩展 ...
- 记一次运行spark程序遇到的权限问题
设置回滚点在本地运行时正常,在集群时就报错,后来是发现ceshi这个目录其他用户没有写的权限,修改其他用户的权限就好了 hdfs dfs - /ceshi
- re——正则表达式
常用的表达式规则 '.' 默认匹配除\n之外的任意一个字符,若指定flag DOTALL,则匹配任意字符,包括换行 '^' 匹配字符开头,若指定flags MULTILINE,这种也可以匹配上(r&q ...
- 使用phppgadmin 遇到的小问题
无法登录,显示错误消息如下: Error:login disallowed for security reasons. 解决方法: 修改conf/config.inc.php文件中的extra_log ...
- 鼠标在窗口中的坐标转换到 canvas 中的坐标
鼠标在窗口中的坐标转换到 canvas 中的坐标 由于需要用到isPointInPath函数,所以必须得将鼠标在窗口中的坐标位置转换到canvas画布中的坐标,今天发现网上这种非常常见的写法其 ...
- Struts2报错:No result defined for action xxx and result input
case如下: 1. 后台程序要升级, 修改了一些功能,但是没有修改或者添加action的参数. 2. 数据库需要升级,执行了一些sql,修改过action的值. 3. 当修改某个已经存在的记录,然后 ...
- [git 学习篇]版本回退
再次修改readme.txt ,并将其提交成功 $ git add readme.txt $ git commit -m "append GPL" [master ] append ...
- 常用类--Date日期类,SimpleDateFormat日期格式类,Calendar日历类,Math数学工具类,Random随机数类
Date日期类 Date表示特定的时间,精确到毫秒; 构造方法: public Data() public Date(long date) 常用方法: public long getTime() pu ...
- hihoCoder #1343 Stable Members
题目大意$\newcommand{\SD}{\mathrm{SD}}$ 给定一个 $n+1$ 个点的有向无环图,点从 $0$ 开始编号.无重边.自环,且从每个点 $u$ 都能到达 $0$ 号点.如果每 ...