2

내 응용 프로그램에서 UINavigationController를 사용하고 있습니다. 나는 "부모"UIViewController와 "자식"UIViewController 스택에서 실행됩니다. 사용자는 나중에 부모에게 영향을 미칠 것으로 생각되는 하위 설정을 일부 수행 할 수 있습니다. NSUserDefaults를 사용하여 데이터를 저장하고 검색하며 NSLog에 따라 정상적으로 작동하는 것 같습니다.iOS : 자식 UIViewController 팝업 후 UIViewController "새로 고침"방법?

내가 명확하지 않은 점은 아이에게서 돌아와서 데이터를 "새로 고침"하는 방법입니다.

좀 더 자세히 설명해주세요. 하위에는 popViewControllerAnimated를 수행 한 후 "부모"로 돌아가는 "뒤로"버튼이 있습니다. 부모 뷰 필드가 NSUserDefaults 데이터에서 얻은 변경 내용으로 설정되도록 viewDidLoad에있는 모든 메서드를 다시 실행하고 싶습니다.

  1. 여기서 부모 메서드에서 뷰를 "새로 고침"한다고 말합니까?
  2. 어떻게이 새로 고침 작업을 수행합니까? viewDidLoad를 다시 호출해야합니까? setNeedsDisplay라는 무언가에 대해 읽었습니다. 사용해야하는 것이면, 구문은 무엇입니까 ("self. view setNeedsDisplay"또는 다른 것입니까?)?

직접적이고 정교한 사람이 있습니까?

답변

4

NSNotification - 코드의 한 부분에서 다른 부분으로 업데이트를 보내는 쉬운 방법은 Apple의 기본 제공 NSNotification 시스템입니다.

  1. 보내려는 업데이트가있는 경우 postNotificationName으로 전화하십시오. 구성한 고유 한 문자열 (예 : "com.razeware.imagegrabber.imageupdated")과 개체 (예 : 이미지 다운로드를 마친 ImageInfo)를 제공하면됩니다.

  2. 이 업데이트가 언제 발생하는지 확인하려면 addObserver:selector:name:object으로 전화하십시오. 우리의 경우 ImageListViewController는 이것이 일어날 때 알기를 원할 것입니다. 그래서 적절한 테이블 뷰 셀을 다시로드 할 수 있습니다. 이것을 넣을 좋은 장소는 viewDidLoad입니다.

  3. 보기가 언로드되면 removeObserver:name:object으로 전화하는 것을 잊지 마십시오. 그렇지 않으면 통지 시스템이 언로드 된 뷰에서 메소드를 호출하려고 시도 할 수 있습니다 (또는 할당되지 않은 객체가 악화 될 수 있습니다). 레이 Wenderlich를 통해 blog

2

NSUserDefaultsDidChangeNotification을 트리거로 사용하여 루트보기 컨트롤러를 새로 고칠 수 있습니다.

+0

"- (void) NSUserDefaultsDidChangeNotification {}"과 같은 방법입니까, 아니면 어딘가에서 작성해야 할 줄입니다 (그렇다면, 어디에서)? –

+0

아니요 NSNotificationCenter 클래스를 사용하여 등록 할 수있는 알림의 이름입니다. 다음은 알림 주제에 대한 문서 모음입니다. http://developer.apple.com/library/ios/documentation/Cocoa/Conceptual/Notifications/ – PeyloW

0

는 또한 NavigationViewController에 대리인으로 당신의 ViewController를 설정할 수

다음
self.navigationController.delegate = self; 

당신이 위임을받을 것이다는 방식으로 호출

- (void)navigationController:(UINavigationController *)navigationController 
     didShowViewController:(UIViewController *)viewController 
        animated:(BOOL)animated { 
    NSLog(@"Did Show controller %@", viewController); 
    // Return from child 
    if ([viewController isKindOfClass:[SRPeopleViewController class]]) { 
     [self loadData]; 
    } 

}

작은 단점 - 또는 비용 - o 이 솔루션은 원하는 것보다 더 많은 전화를 받게되므로 필터링이 필요합니다.