ios - 생성 - UIViewController viewDidLoad 대 viewWillAppear:적절한 노동 분업이란 무엇입니까?




viewcontroller swift (3)

UIViewController 하위 클래스에서 viewDidLoadviewWillAppear 할당해야하는 작업 유형에 대해 항상 명확하지 않습니다.

예를 들어 UIViewController 하위 클래스가 서버를 치고 데이터를 가져와 뷰에 공급 한 다음 해당 뷰를 표시하는 앱을 수행하고 있습니다. viewDidLoadviewWillAppear 에서이를 수행하는 장단점은 무엇입니까?

https://code.i-harness.com


TableView에서 처음에는 ViewDidLoad 만 사용했습니다. Wifi를 잃어버린 상태에서 기기를 비행기 모드로 설정하여 Wi-Fi가 반환되어 테이블이 새로 고침되지 않음을 알았습니다. 사실, -Info.plist에서 백그라운드 모드가 YES로 설정된 홈 버튼을 눌러도 장치에서 tableView를 새로 고칠 방법이없는 것처럼 보입니다.

내 솔루션 :

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

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

그러나 서버에서 물건을로드 할 때 대기 시간에 대해서도 고려해야합니다. 모든 네트워크 통신을 viewDidLoad 또는 viewWillAppear에 압축하면 사용자가보기를보기 전에 실행되어 앱이 잠시 중단 될 수 있습니다. 우선 사용자에게 일종의 활동 표시기가있는 비공개보기를 표시하는 것이 좋습니다. 네트워킹 작업이 끝나면 2 ~ 2 초가 걸릴 수 있습니다 (또는 누가 아는 사람 일지라도 실패 할 수 있습니다). 데이터를보기에 채울 수 있습니다. 이것이 어떻게 행해질 수 있는지에 대한 좋은 예는 다양한 트위터 클라이언트에서 볼 수 있습니다. 예를 들어, Twitterrific에서 작성자 세부 정보 페이지를 볼 때 네트워크 쿼리가 완료 될 때까지보기에는 "로드 중 ..."이라는 메시지 만 표시됩니다.


의존성, 뷰를 열 때 마다 로드 할 데이터가 필요합니까? 아니면 한 번만 ?

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

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

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





viewwillappear