[ios] UIViewController viewDidLoad 대 viewWillAppear : 적절한 분업은 무엇입니까?

나는 항상 서브 클래스 에서 viewDidLoadvs.에 할당 해야하는 작업 유형에 대해 약간 불분명했습니다 .viewWillAppearUIViewController

예를 들어 UIViewController서버를 때리고 데이터를 가져 와서 뷰에 공급 한 다음 해당 뷰를 표시 하는 하위 클래스 가있는 앱을 만들고 있습니다. 이 일의 장점과 단점은 무엇입니까 viewDidLoad대는 viewWillAppear?



답변

viewDidLoad는 한 번만 수행해야하는 작업입니다. 뷰가 나타날 때마다 viewWillAppear가 호출됩니다. UIDabel 텍스트 설정과 같이 viewDidLoad에서 한 번만 수행해야하는 작업을 수행해야합니다. 그러나 사용자가 볼 때마다보기의 특정 부분을 수정하고 싶을 수 있습니다. 예를 들어 iPod 응용 프로그램은 “지금 재생 중”보기로 갈 때마다 가사를 맨 위로 스크롤합니다.

그러나 서버에서 항목을로드 할 때 대기 시간도 고려해야합니다. 모든 네트워크 통신을 viewDidLoad 또는 viewWillAppear로 압축하면 사용자가보기를보기 전에 실행되어 앱이 잠시 정지 될 수 있습니다. 먼저 어떤 종류의 활동 표시기가있는 채워지지 않은보기를 사용자에게 표시하는 것이 좋습니다. 네트워킹이 완료되면 1-2 초가 걸리거나 실패 할 수도 있습니다. 데이터를 사용하여 뷰를 채울 수 있습니다. 이를 수행하는 방법에 대한 좋은 예는 다양한 트위터 클라이언트에서 볼 수 있습니다. 예를 들어 Twitterrific에서 작성자 세부 정보 페이지를 볼 때 네트워크 쿼리가 완료 될 때까지 “로드 중 …”만 표시됩니다.


답변

처음에는 tableView와 함께 ViewDidLoad 만 사용했습니다. Wifi가 손실 된 테스트에서 장치를 비행기 모드로 설정하여 Wifi를 반환해도 테이블이 새로 고쳐지지 않음을 알았습니다. 실제로 -Info.plist에서 백그라운드 모드가 YES로 설정된 홈 버튼을 눌러도 장치에서 tableView를 새로 고칠 수있는 방법이 없습니다.

내 해결책 :

-(void) viewWillAppear: (BOOL) animated { [self.tableView reloadData];}


답변

포지셔닝에 viewDidLoad를 사용하는 것은 약간 위험하므로 경계가 설정되지 않았으므로 피해야합니다. 예기치 않은 결과가 발생할 수 있습니다 (다양한 문제가 발생했습니다 …)

이 게시물 은 다른 방법과 각 방법에서 발생하는 일에 대해 잘 설명합니다.

현재 일회성 초기화 및 위치 지정을 위해 다른 권장 사항이있는 사람이 있으면 viewDidAppear를 플래그와 함께 사용할 생각입니다.


답변

뷰를 열 때 마다 데이터를로드해야 합니까? 아니면 한 번만 ?

여기에 이미지 설명을 입력하십시오

  • 빨간색 : 매번 변경할 필요가 없습니다. 일단로드되면 원래 상태 그대로 유지됩니다.
  • 자주색 : 시간이 지남에 따라 또는 매번로드 한 후에 변경해야합니다. 동일한 추천 사용자 3 명을보고 싶지 않다면 화면으로 돌아올 때마다 다시로드해야합니다. 그들의 사진이 업데이트 될 수 있습니다 … 5 년 전의 사진을보고 싶지 않습니다 …

viewDidLoad:어떤 처리를 수행하든 한 번 수행해야합니다.
viewWilLAppear:페이지가로드 될 때마다 변경해야하는 처리

레이블, 아이콘, 버튼 제목 또는 대부분의 dataInputedByDeveloper는 일반적으로 변경되지 않습니다. 이름, 사진, 링크, 버튼 상태, 목록 (tableView 또는 collectionView의 입력 배열) 또는 대부분의 dataInputedByUser는 일반적으로 변경됩니다.


답변