2012-07-23 7 views
0

나는 objective-c에서 초보자입니다. UITextField에서 문자열을 저장하는 데 문제가 있습니다.NSUserDefaults에 문자열을 저장하지 않을 때까지 보관하지 않음

속성에서 문자열을 선언하고이를 "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 (코드 = 1, 주소 = 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!

답변

2

당신은 실제로 속성을 사용하지

familyName = inputFamilyName.text; 

당신이 할 때. 속성과 동일한 이름을 가진 인스턴스 변수를 사용하지만 메모리 관리 항목은 사용하지 않습니다.

는 당신이 일을해야하는 것은

self.familyName = inputFamilyName.text; 

입니다 그리고, 호텔에서 시작된다 유지하고, 수동으로 유지할 필요가 없습니다.

가 힘들어 실수를 할 수 있도록하기 위해, 당신은 할 수 귀하의 @synthesize 문을 변경할 수 있습니다 :

@synthesize familyName = _familyName; 

당신은 그때는 familyName라는 속성이 _familyName지지라는 인스턴스 변수가된다는 것을 의미 그렇게한다면 실수로 실수로 실수로 잘못 입력하면이 실수를 피하는 것이 훨씬 어렵습니다.

+0

빠른 응답을 위해 Thx. 정말 작동합니다! 이제 알겠습니다! – Walter

관련 문제