0

获取数据时:

KeychainItemWrapper *keychain = [[KeychainItemWrapper alloc] initWithIdentifier:@"LoginData" accessGroup:nil];
NSString *user = [[NSUserDefaults standardUserDefaults] valueForKey:@"ACC"];
NSString *pass = [keychain objectForKey:CFBridgingRelease(kSecAttrAccount)];

保存数据时:

KeychainItemWrapper *keychain = [[KeychainItemWrapper alloc] initWithIdentifier:@"LoginData" accessGroup:nil];
[[NSUserDefaults standardUserDefaults] setObject:[jsonResult objectForKey:@"user"] forKey:@"ACC"];
[keychain setObject:[jsonResult objectForKey:@"token"] forKey:CFBridgingRelease(kSecAttrAccount)];

我正在重复使用几年前使用过的代码。但是,现在我遇到了部分无法正常工作的问题。

对于它的价值,我正在使用 KeyChainItemWrapper 版本:1.2(Objective-c)

工作正常,[[NSUserDefaults standardUserDefaults] valueForKey:@"ACC"]并且被保存,但是存储一个值CFBridgingRelease(kSecAttrAccount)并不能保存。运行获取代码时,在保存代码之后,我只得到(null).

我正在使用带有模拟器版本 10 的 xcode 8.3.1,运行 iPhone 7 版本 10.3。

最新的 IDE 版本和 iOS 版本是唯一改变的东西

4

1 回答 1

0

对于将数据保存和检索到钥匙链,请确保使用 Apple 默认的 ARC 版本。

保存到钥匙链:-

KeychainItemWrapper *keychainItem = [[KeychainItemWrapper alloc] initWithIdentifier:@"Your identifire" accessGroup:nil];
  [keychainItem setObject:appleUserId forKey:(id)CFBridgingRelease(kSecAttrAccount)];

从钥匙链中检索数据:-

KeychainItemWrapper *keychainItem = [[KeychainItemWrapper alloc] initWithIdentifier:@"Your identifire" accessGroup:nil];
        
        NSString *savedUserID = [keychainItem objectForKey:(id)CFBridgingRelease(kSecAttrAccount)];

欲了解更多信息,请查看官方链接:

https://developer.apple.com/documentation/foundation/1587932-cfbridgingrelease

https://gist.github.com/dhoerl/1170641

于 2021-01-21T05:39:04.163 回答