核心数据&x2B;为应用程序创建ios帐户的密钥链

核心数据&x2B;为应用程序创建ios帐户的密钥链,ios,xcode,core-data,keychain,Ios,Xcode,Core Data,Keychain,我正在尝试实现为我的应用程序创建帐户的代码。到目前为止,我认为我已经很好地理解了从textfields获取数据并将其存储在核心数据数据库中,但我不确定如何将用户创建的pin存储在应用程序的钥匙链中。我遵循它创建了一个名为Account的类,我认为它是AccountBase的一个子类。Account.m文件的方法声明为: -(void)setPassword:(NSString*)aPassword 现在我很确定这就是我想用来为我的应用程序设置“pin”的方法。我不确定如何应用于ViewContr

我正在尝试实现为我的应用程序创建帐户的代码。到目前为止,我认为我已经很好地理解了从textfields获取数据并将其存储在核心数据数据库中,但我不确定如何将用户创建的pin存储在应用程序的钥匙链中。我遵循它创建了一个名为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文件中有以下代码:


任何人都知道,当按下“创建”按钮时,我会如何将输入的pin码存储到钥匙链中。

好吧,多亏了@laded in chat.stackoverflow.com的帮助,我想出了一个解决方案。修订后的守则如下:

// 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.");
}
}

// 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.");
}