0

アプリのアカウントを作成するコードを実装しようとしています。これまでのところ、テキストフィールドからデータを取得してコアデータデータベースに保存することは十分に理解していると思いますが、ユーザーが作成したピンをアプリのキーチェーンに保存する方法がわかりません。私は、 AccountBaseのサブクラスであると思うAccountというクラスを作成するこのチュートリアルに従いました。Account.mファイルには、次のメソッド宣言があります。

- (void)setPassword:(NSString*)aPassword

これが、アプリケーションの「ピン」を設定するために使用したい方法であると確信しています。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.");
}
}

「作成」ボタンが押されたときに、入力されたピンをキーチェーンに保存する方法は誰でも知っています。

4

1 に答える 1

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

}

于 2012-06-20T02:11:10.270 に答える