私はObjective-cの初心者です。UITextFieldから文字列を保存する際に問題が発生しました。
プロパティで文字列を宣言し、ユーザーの家系の名前を格納するために「familyName」という名前の文字列を合成しました。次に、ユーザーがボタンを押したときにfamilyNameを保存します。
-(IBAction)textFieldDidBeginEditing:(UITextField *)textField;
{}
-(BOOL)textFieldShouldReturn:(UITextField *)textField{
familyName = inputFamilyName.text;
NSLog(@"the user's family name is %@", familyName); //it works here.
if (inputFamilyName == textField) {
[inputFamilyName resignFirstResponder];
}
return YES;
}
-(IBAction)goToNameWheel:(id)sender{
NSUserDefaults *userDefault = [NSUserDefaults standardUserDefaults];
[userDefault setObject:familyName forKey:@"family"];
[userDefault synchronize];
}
保存コードを実行するとクラッシュし、「スレッド1:EXC_BAD_ACCESS(code = 1、address =0x......」と表示されます。
その後、familyNameに何が起こるかを確認するために別のテストを試み、次のように書きました。
-(IBAction)test:(id)sender{
NSLog(@"1.the family name is %@", inputFamilyName.text); // This works...
NSLog(@"2.the family name is %@", familyName);} // This crashes...
最後に...私はtextFieldDidBeginEditingにfamilyNameを保持しようとします:
-(BOOL)textFieldShouldReturn:(UITextField *)textField{
familyName = inputFamilyName.text;
NSLog(@"the user's family name is %@", familyName); //it works here.
if (inputFamilyName == textField) {
[inputFamilyName resignFirstResponder];
}
[familyName retain]; // just added randomly...
return YES;
}
その後、すべてが正常に機能し、familyNameを保存して、印刷することができます。私の質問は...ここで正確に何が起こるのか、なぜそれを保持する必要があるのですか?元のコードに何か問題がありますか?あなたの時間のためのThx!