如果您无法下载资料,请参考说明:
1、部分资料下载需要金币,请确保您的账户上有足够的金币
2、已购买过的文档,再次下载不重复扣费
3、资料包下载后请先用软件解压,在使用对应软件打开
HYPERLINK"http://www.qingyangblog.com"家用制氧机十大品牌HYPERLINK"http://www.qingyangblog.com"鱼跃家庭吸氧机通常情况下,我们用NSUserDefaults存储数据信息,但是对于一些私密信息,比如密码、证书等等,就需要使用更为安全的keychain了。keychain里保存的信息不会因App被删除而丢失,在用户重新安装App后依然有效,数据还在。使用苹果官方发布的KeychainItemWrapper或者SFHFKeychainUtils很方便,后来看到HYPERLINK"http://blog.csdn.net/bl1988530/article/details/6887946"\t"_blank"iphone使用keychain来存取用户名和密码一文,觉得对了解keychain有很大的帮助,于是ARC控也尝试了一把。需要导入Security.framework@implementationWQKeyChain+(NSMutableDictionary*)getKeychainQuery:(NSString*)service{return[NSMutableDictionarydictionaryWithObjectsAndKeys:(__bridge_transferid)kSecClassGenericPassword,(__bridge_transferid)kSecClass,service,(__bridge_transferid)kSecAttrService,service,(__bridge_transferid)kSecAttrAccount,(__bridge_transferid)kSecAttrAccessibleAfterFirstUnlock,(__bridge_transferid)kSecAttrAccessible,nil];}+(void)save:(NSString*)servicedata:(id)data{//GetsearchdictionaryNSMutableDictionary*keychainQuery=[selfgetKeychainQuery:service];//DeleteolditembeforeaddnewitemSecItemDelete((__bridge_retainedCFDictionaryRef)keychainQuery);//Addnewobjecttosearchdictionary(Attention:thedataformat)[keychainQuerysetObject:[NSKeyedArchiverarchivedDataWithRootObject:data]forKey:(__bridge_transferid)kSecValueData];//AdditemtokeychainwiththesearchdictionarySecItemAdd((__bridge_retainedCFDictionaryRef)keychainQuery,NULL);}+(id)load:(NSString*)service{idret=nil;NSMutableDictionary*keychainQuery=[selfgetKeychainQuery:service];//Configurethesearchsetting[keychainQuerysetObject:(id)kCFBooleanTrueforKey:(__bridge_transferid)kSecReturnData];[keychainQuerysetObject:(__bridge_transferid)kSecMatchLimitOneforKey:(__bridge_transferid)kSecMatchLimit];CFDataRefkeyData=NULL;if(SecItemCopyMatching((__bridge_retainedCFDictionaryRef)keychainQuery,(CFTypeRef*)&keyData)==noErr){@try{ret=[NSKeyedUnarchiverunarchiveObjectWithData:(__bridge_transferNSData*)keyData];}@catch(NSException*e){NSLog(@"Unarchiveof%@failed:%@",service,e);}@finally{}}retu