2014-07-10 6 views
0

두 개의 뷰 컨트롤러 A와 B가 있습니다. A에서 B까지 뷰 콘트롤러 B를 A 위에 추가합니다. 팝업시 다음 방법을 B에서 호출합니다.하나의보기 컨트롤러에서 다른보기 컨트롤러로 전환 - UI 업데이트

-(void)viewWillDisappear:(BOOL)animated{ 
    [super viewWillDisappear:animated]; 
    NSUserDefaults *userSettings = [NSUserDefaults standardUserDefaults]; 
    [userSettings setObject:firstName.text forKey:@"FN"]; 
    [userSettings setObject:lastName.text forKey:@"LN"]; 
    [userSettings synchronize]; 
} 

이 userInfoUpdate 메서드는 응용 프로그램의 NSUserDefaults 개체를 업데이트합니다.

- (void)viewWillAppear:(BOOL)animated 
{ 
    [super viewWillAppear:animated]; 
    NSUserDefaults *userSettings = [NSUserDefaults standardUserDefaults]; 
    profileTextField.text = [NSString stringWithFormat:@"%@ %@",[userSettings objectForKey:@"FN"],[userSettings objectForKey:@"LN"]]; 
} 

을하지만이 textfiled 문자열을 업데이트하지 않습니다합니다 : A ~의 ViewController 다시 돌아 오는 , 난에서 다음 메서드를 호출합니다. 내가 여기서 뭘 잘못하고 있는거야? 더 나은 대안이 있습니까?

+0

애플리케이션 출시 및 업그레이드를 통해 저장 될 때

(A)는 현재 값을 업데이트 한 것입니다. –

+0

왜 NSUserDefaults의 데이터를 A의 viewWillAppear에서 읽지 않습니까? – hackerinheels

+0

@hackerinheels 나는 A의 전망에서 NSUserDefaults를 읽습니다 .Appear. 나는 편집을했다. A의 viewwill처럼 보입니다. B의 ViewWillDisappear가 나타나기 전에 호출됩니다. –

답변

1

두 컨트롤러에서 공유 할 수있는 데이터 모델로 작동하는 클래스를 만드는 것이 좋습니다. 그렇게하면 Viewcontroller 대리자 함수 순서에 대해 걱정할 필요가 없습니다.

@interface DataModel: NSObject 
{ 
    NSString *firstName; 
    NSString *lastName; 
} 

A는 DataModel에 대한 개체를 포함

@interface AVC:UIViewController 
    @property (nonatomic, strong) DataModel *myDataModel 

를, A는 B를 생성하고 myDataModel B가 업데이트되도록 통과 viewDidDissapear에 저장할 때. 이보기에서 돌아 오면 또한 당신은 당신의 * 실제 * 코드를 표시해야합니다

0

[userSettings synchronize]를 호출하여 저장하지 마십시오.

+0

나는했다. 나는 여전히 그 질문을 편집하고 있었다. 죄송합니다 –

+0

대신 viewDidAppear에서 필드를 업데이트하면 어떻게됩니까? – antonio

+0

또한 corr.methods에서 [super viewWillAppear : animated] 및 [super viewWillDisappear : animated]를 호출하는 것을 잊지 마십시오. 그렇지 않으면 앱이 올바르게 작동하지 않습니다. – antonio

관련 문제