我正在尝试实现代码来为我的应用创建帐户。到目前为止,我认为我很好地理解从文本字段中获取数据将其存储在Core Data数据库中,但我不确定如何将用户创建的pin存储在应用程序的keychain中。我跟着this tutorial创建了一个名为 Account 的类,我认为它是 AccountBase 的子类。 Account.m文件的方法声明为:
- (void)setPassword:(NSString*)aPassword
现在我很确定这是我想用来为我的应用程序设置“pin”的方法。我不确定如何应用于我的 ViewControllerCreate.m 文件。整个方法如下所示:
- (void)setPassword:(NSString*)aPassword
{
if (self.username) [KeychainHelper setPassword:aPassword forKey:self.username];
}
到目前为止,我的 ViewControllerCreate.m 文件中包含此代码:
- (IBAction)createAccount:(id)sender {
// hide keyboard when login button is pressed
[_createUserTextField resignFirstResponder];
// check if create textfields are empty - WRONG
[self checkTextFieldCharLength];
// check if boolean is true / false
if([self checkTextFieldEmpty] == TRUE ) // empty text fields
{
NSLog(@"Please fill in text fields");
}
else {
NSLog(@"Thanks for filling out the text fields.");
// Core Data - retrieve values from text fields and store in database.
NSManagedObject *newAccount;
newAccount = [NSEntityDescription insertNewObjectForEntityForName:@"Account" inManagedObjectContext:_managedObjectContext];
[newAccount setValue:_createUserTextField forKey:@"username"];
[newAccount setValue:_createEmailTextField forKey:@"email"];
[newAccount setValue:_createPhoneNumber forKey:@"phoneNumber"];
// TODO store pin in keychain
_createUserTextField.text = @"";
_createEmailTextField.text = @"";
_createPhoneNumber.text = @"";
NSError *error;
[_managedObjectContext save:&error];
[_createAccountSuccess setHidden:NO];
NSLog(@"Succefully created account.");
}
}
当按下“创建”按钮时,任何人都知道如何将输入的引脚存储到钥匙串中。
答案 0 :(得分:0)
在chat.stackoverflow.com的@Faded的帮助下,我想出了一个解决方案。修改后的代码如下:
// method to pull text from text fields and store in keychain and account database
- (IBAction)createAccount:(id)sender {
[self checkTextFieldCharLength];
// check if create textfields are empty, check if boolean is true / false
if([self checkTextFieldEmpty] == TRUE ) // empty text fields
{
NSLog(@"Please fill in text fields");
}
else {
NSLog(@"Thanks for filling out the text fields.");
// Core Data - retrieve values from text fields and store in database.
Account *newAccount;
newAccount = [NSEntityDescription insertNewObjectForEntityForName:@"Account" inManagedObjectContext:_managedObjectContext];
[newAccount setValue:_createUserTextField.text forKey:@"username"];
[newAccount setValue:_createEmailTextField.text forKey:@"email"];
[newAccount setValue:_createPhoneNumber.text forKey:@"phoneNumber"];
// TODO store pin in keychain
[newAccount setPassword:_createPinTextField.text];
NSLog(@"Pin saved is %@", [newAccount password]);
_createUserTextField.text = @"";
_createEmailTextField.text = @"";
_createPhoneNumber.text = @"";
_createPinTextField.text = @"";
NSError *error;
[_managedObjectContext save:&error];
[_createAccountSuccess setHidden:NO];
NSLog(@"Succefully created account.");
}
}