- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在我的 iOS 应用程序中使用 Rails API,当我创建用户时,我将用户的响应存储在钥匙串(keychain)中。诸如用户 auth_token、电子邮件等之类的东西。响应中的 json 字段之一是一个名为 teecher
的 bool 值。
我正在努力弄清楚如何从钥匙串(keychain)中存储和检索它。我已附上我的凭证存储的现有代码,该代码目前正在保存详细信息。
CredentialStore.h
#import <Foundation/Foundation.h>
@interface TeechCredentialStore : NSObject
- (BOOL) isLoggedIn;
- (void) clearSavedCredentials;
- (NSString *)authToken;
- (NSString *)firstName;
- (NSString *)lastName;
- (NSString *)email;
- (NSString *)password;
- (NSString *)avatarURL;
- (NSString *)userId;
- (NSNumber *)teecher;
- (void) setAuthToken: (NSString *)authToken;
- (void) setFirstName: (NSString *)firstName;
- (void) setLastName: (NSString *)lastName;
- (void) setEmail: (NSString *)email;
- (void) setPassword: (NSString *)password;
- (void) setAvatarURL: (NSString *)avatar;
- (void) setUserId: (NSString *)userId;
- (void) setIsTeecher: (NSNumber *)teecher;
@end
CredentialStore.m 这是我努力设置的地方
#define SERVICE_NAME @"Teechy"
#define AUTH_TOKEN_KEY @"auth_token"
#define FIRST_NAME_KEY @"first_name"
#define LAST_NAME_KEY @"last_name"
#define EMAIL_KEY @"email"
#define PASSWORD_KEY @"password"
#define AVATAR_URL @"avatar_url"
#define USER_ID @"id"
#define TEECHER_KEY @"teecher"
@implementation TeechCredentialStore
- (BOOL)isLoggedIn {
return [self authToken] != nil;
}
- (void)clearSavedCredentials {
[self setAuthToken:nil];
}
- (NSString *)authToken {
return [self secureValueForKey:AUTH_TOKEN_KEY];
}
- (NSString *)firstName {
return [self secureValueForKey:FIRST_NAME_KEY];
}
- (NSString *)lastName {
return [self secureValueForKey:LAST_NAME_KEY];
}
- (NSString *)email {
return [self secureValueForKey:EMAIL_KEY];
}
- (NSString *)password {
return [self secureValueForKey:PASSWORD_KEY];
}
- (NSString *)avatarURL {
return [self secureValueForKey:AVATAR_URL];
}
- (NSString *)userId {
return [self secureValueForKey:USER_ID];
}
- (NSNumber *)teecher {
return [self secureValueForKey:TEECHER_KEY];
}
- (void)setAuthToken:(NSString *)authToken {
[self setSecureValue:authToken forKey:AUTH_TOKEN_KEY];
[[NSNotificationCenter defaultCenter] postNotificationName:@"token-changed" object:self];
}
- (void) setFirstName:(NSString *)firstName {
[self setSecureValue:firstName forKey:FIRST_NAME_KEY];
}
- (void) setLastName:(NSString *)lastName {
[self setSecureValue:lastName forKey:LAST_NAME_KEY];
}
- (void) setEmail: (NSString *)email {
[self setSecureValue:email forKey:EMAIL_KEY];
}
- (void) setPassword: (NSString *)password {
[self setSecureValue:password forKey:PASSWORD_KEY];
}
- (void) setAvatarURL:(NSString *)avatar {
[self setSecureValue:avatar forKey:AVATAR_URL];
}
- (void) setUserId: (NSString *)userId {
[self setSecureValue:userId forKey:USER_ID];
}
- (void) setTeecher:(NSNumber *)teecher {
[self setSecureValue:teecher forKey:TEECHER_KEY];
}
- (void)setSecureValue:(NSString *)value forKey:(NSString *)key {
if (value) {
[SSKeychain setPassword:value
forService:SERVICE_NAME
account:key];
} else {
[SSKeychain deletePasswordForService:SERVICE_NAME account:key];
}
}
- (NSString *)secureValueForKey:(NSString *)key {
return [SSKeychain passwordForService:SERVICE_NAME account:key];
}
@end
最后,这是我获取从响应返回的 json 并将其发送到凭据存储时的代码。请记住,我省略了实例化凭据存储和设置变量的位置。
[manager POST:urlString parameters:params progress:^(NSProgress * _Nonnull uploadProgress) {
// prgress implementation
} success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) {
NSDictionary *JSON = [responseObject objectAtIndex:0];
NSDictionary *user = JSON[@"user"];
NSString *token = user[@"auth_token"];
NSString *avatarURL = user[@"avatar_url"];
weakSelf.credentialStore.avatarURL = avatarURL;
weakSelf.credentialStore.authToken = token;
weakSelf.credentialStore.firstName = self.firstNameField.text;
weakSelf.credentialStore.lastName = self.lastNameField.text;
weakSelf.credentialStore.email = self.emailField.text;
weakSelf.credentialStore.password = self.passwordField.text;
[SVProgressHUD dismiss];
[self dismissViewControllerAnimated:YES completion:nil];
} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
// if (task.isCancelled) {
// return;
// }
[SVProgressHUD showErrorWithStatus:@"Login Failed"];
NSLog(@"%@", error);
}];
最佳答案
尝试像这样将 NSNumber 转换为 NSString
- (void) setTeecher:(BOOL)teecher {
[self setSecureValue:[@(teecher) stringValue] forKey:TEECHER_KEY];
}
- (BOOL)teecher {
return [[self secureValueForKey:TEECHER_KEY] boolValue];
}
关于ios - 如何在 Keychain iOS 中存储 NSNumber,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36549323/
我正在开发一些代码,其中我使用扫描仪从字符串中获取 NSNumbers,例如 x 和 y。 现在我想从 x 和 y 计算一些简单的东西,比如 z = 10.0/(x + y/60.0)/60.0)。我
第一次发帖。 NSNumber 的 floatValue 方法有问题——不知何故,它返回一个不精确的数字。问题在于:我将一堆 NSNumbers 存储在一个数组中,如下所示: NSArray *a =
我在尝试使用从基类继承的泛型函数的参数时遇到标题错误 基类: BaseBottomBar: UIView { ... func formatDetailText(value: T...
我有下面这行代码 NSNumber *myValue = loadTempValue*0.420; 我试图将 *myValue 的值设置为 loadTempValue*0.420 的值, 但是,我得到
我在将 NSNumber 转换为字符串以及将字符串转换为 NSNumber 时遇到问题。 这是一个示例问题: NSString *stringValue = @"9.2"; NSNumberForma
有一个坐标对象,具有三个变量纬度(NSNumber),经度(NSNumber)和时间(NSDate),为了在我的模拟器上检查程序,我给出了以下代码 [coordinate setLatitude:[N
简单方法:我有一个 SearchView,用户可以在其中选择一些 CoreDate,然后他可以搜索 Name、City( >NSString) 和Clientnumber (NSNumber) NSP
我转换这个 Objective-C 函数: - (NSArray *)grt_map:(id (^)(id))block { NSMutableArray *newArray = [NSMut
示例:我有一个 NSInteger,我将其包装到一个 NSNumber 对象中。现在我想要一个具有该 NSInteger 值的 NSDecimal。 那么我可以问: NSDecimal myDecim
我有这个自定义类: @interface MyModel : NSObject @property (nonatomic,strong) NSString *id_name; @property (n
在我的应用程序中,我进入 CoreData 并获取一个类型为 Double 的条目,然后我试图将该值放入我的应用程序的文本字段中。 这看起来像 lengthTextField.text = lastS
用户输入一个数字( float 或整数),并且它必须大于下限。 这是从 UITextField 获取数字的代码: NSNumberFormatter * f = [[NSNumberFormatter
我正在为 iPhone 应用程序使用 NSNumber,并看看我能用它做什么。对于我的大多数变量,我简单地将它们存储为“int”或“float”或其他类型。但是,当我必须传递一个对象(例如在字典中)时
我使用 [NSNumber numberWithDouble:] 方法来形成我的 NSNumber。但是,由于某些值可能很大,我想知道是否有办法告诉 NSNumber 用科学记数法表示自己。提前致谢!
一个 NSNumber 可以存储不同的基本类型,如short、int、long、long long、float、double 但是当我这样做时,尺寸会改变 @(long long) 相比 @(int)
我编写了一个 Objective-C 类,并且在我的 iPhone 项目中的多个 View 中使用它的共享实例。它的成员变量包括 bools、ints、NSStrings 和一个 NSNumber。共
创建一个 ARC 新项目并将此代码注入(inject)到 didFinishLaunchingWithOptions 中。 for (int i=0; i < 1000000; i++) {
我对 Objective C 比较陌生,需要一些数组帮助。 我有一个 plist,其中包含一个字典和一个 NSNumber 数组,还有更多数组可供使用稍后添加。 NSMutableDictionary
我正在尝试将 NSNumber 放入数组中: NSNumber *n = [NSNumber numberWithInt:1]; [[array objectAtIndex:0] setValue:n
我正在开发一个简单的计算器 iPhone 应用程序。只是为了练习的目的。我有一个 IBAction 方法来存储用户输入的数字。整个概念是计算器应用程序堆积待处理的操作,以便用户可以执行多个操作,并且屏
我是一名优秀的程序员,十分优秀!