2011-11-19 6 views
0
NSString *senderName = [sender currentTitle]; 
NSLog(@"Text to be Saved = %@",senderName); 
[name setObject:senderName forKey:@"key"]; 
NSString *TextActuallySaved = [name stringForKey:@"key"]; 
NSLog(@"Text actually Saved = %@", TextActuallySaved); 

그래서 나는이 코드를 가지고, 그리고 그것을 실행할 때 콘솔이 얻을 : 그래서왜 이렇게 저장하지 않았습니까?

appName[19556:f803] Text to be Saved = SCV 
appName[19556:f803] Text actually Saved = (null) 

, 내가 무슨 짓을 한거야? 그래서 같이 @interface에서 헤더에 NSUserDefault 객체를 선언 :이 밀어지고로

@interface viewController : UIViewController { 
NSUserDefaults *name; 
} 

이 모든 코드가의 ViewController입니다. 그래서 그 이유가 무엇입니까? 그렇다면이 문제를 해결할 수있는 방법이 있습니까? 이것은 심각하게 나를 괴롭 히고 있습니다. 어떤 도움이라도 대단히 감사 할 것입니다. 감사! 여기

- (id)init { 
if (self = [super init]) 
{ 
    name = [NSUserDefaults standardUserDefaults]; 
} 
return self; 
} 
+0

다음 질문을 저장하려면 (방법이 저장되지 않지만 어떻게됩니까?) 메서드 끝에 [name synchronize]를 호출하는 것을 잊지 마십시오. – NJones

+0

시도해도 출력에 차이가 나지 않습니다. – theCodeMonsters

+0

개체를 확인하기 위해 저장하려고하는 바로 위에 놓습니다. NSLog (@ "MyUserDefaultsObject : % @", 이름); – NJones

답변

1

는 당신이 실제로 개체입니다 기본값으로 그 바르를 설정 했 내 초기화 코드?

name = [NSUserDefaults standardUserDefaults]; 

일반적으로 init 메소드에서 이와 같은 작업을 수행합니다.


ObjectiveC에서는 nil이 호출 된 메소드를 가질 수 있으므로이 모든 것이 nil을 반환합니다. 따라서 name이 nil이면 자동으로 저장에 실패하고, 다시 읽으려고 할 때 return nil을 호출합니다.

+0

알았어. 내 init 메소드에서 그렇게했다. 여전히 작동하지 않았다. – theCodeMonsters

+0

init 메소드 또는 viewDidLoad 메소드에 코드 라인을 복사한다. – NJones

+0

죄송합니다. 내 의견과 내 init 코드가있는 설명을 편집했습니다 .... – theCodeMonsters

0

대부분의 개체와 달리 UIViewController의 지정된 이니셜 라이저는 init이 아닙니다. 지금 당신이 ViewController라고 말한 것을 보았습니다, 미안 해요. UIViewController에 대한 지정된 이니셜 라이저는 initWithCoder 또는 initWithFrame이며, 그 중 하나는 초기화를 위해 호출됩니다. 어떤 문제가 생기는데, '설치 코드는 어디에 두어야합니까?'라는 말은 이전에 논의되었습니다.

사실 NSLog(@"Init");init 방법에 넣으면 결코 호출되지 않는다는 것을 알 수 있습니다. 따라서 결코 귀하의 ivar을 지정할 수 없습니다.

UIViewController을 서브 클래스 화하고 init 메소드에 있지 않은 초기화를 수행하려는 경우 사용자는 viewDidLoad을 사용합니다.

+0

그게 전부지만 지금은 점점 : 현재 이름 : . 나는 그걸로 무엇을해야할지 모른다. – theCodeMonsters

+0

작업 할 실제 NSUserDefaults 개체가 있음을 보여주는 증거로 삼으십시오. – NJones

관련 문제