어흥

[Objective - C] Segue사용시 발생할 수 있는 에러 본문

iOS

[Objective - C] Segue사용시 발생할 수 있는 에러

라이언납시오 2020. 10. 23. 13:38
728x90
반응형

문제점: Present Modally나 다른 세그웨이로 화면을 전환했는데 다음 화면이 전체 화면이 아닌 경우(A vc ->B vc)

- +버튼을 눌러서 화면을 전환하고자 할 때 다음과 같이 전체 화면으로 표시되지 않는다

 

이전 화면
세그웨이를 통해 불러온 화면

[위의 문제로 인해 발생하는 문제]

가정) 아래와 같은 코드가 작성되어있다

- A vc.m에는 viewWillAppear 함수가 구현되어 있다

- B vc.m에는 Save버튼을 눌렀을 때 dismissViewControllerAnimated 코드가 작성되어 있다

//A vc.m
-(void)viewWillAppear:(BOOL)animated {
    NSLog(@"Appeared!!");
    [super viewWillAppear:animated];
    [self.tableView reloadData]; 		//메모리스트를 갱신하는 코드
}


//B vc.m
- (IBAction)save:(id)sender {
    NSString* memo = self.memoTextView.text;
    
    MemoData* newMemo = [[MemoData alloc] initWithContent:memo];
    [[MemoData dummyMemoList] addObject:newMemo];
    
    [self dismissViewControllerAnimated:YES completion:nil];		//이전 화면으로 돌아가는 코드
}

문제점 : B vc에서 [Save] 버튼을 눌러도 A vc에 존재하는 메모리스트가 갱신되지 않는다

 

[위의 문제가 발생되는 원인]

- 뷰컨트롤러 라이프 사이클에 대해서 알고 있어야 한다

아무리 찾아봐도 viewWillAppear에서 선언하면 잘 되는것 같다. 하지만 안된다. 이유는?

-> Save 버튼을 눌러서 B vc가 사라지고 A vc가 사라져도 viewWillAppear가 호출되지 않았다.

 

viewWillAppear의 애플 개발문서를 찾아본다

developer.apple.com/documentation/appkit/nsviewcontroller/1434415-viewwillappear?language=occ

위와 같이 화면에 보이지 않았다가 나타난 경우에만 호출된다. 즉, B vc가 A vc를 완벽히 덮지 못했기 때문에 호출이 안된다

 

전체 화면으로 보이도록 바꾸는 코드

//둘 모두 prepareForSegue 함수에 구한하면 된다
//Swift
let vc = UIViewController()
vc.modalPresentationStyle = .fullScreen //or .overFullScreen for transparency
self.present(vc, animated: true, completion: nil)

//Objective-C
[vc setModalPresentationStyle: UIModalPresentationFullScreen];	//위의 4번째줄 대신 작성

 

[수행 결과]

: 꽉찬 화면으로 인해 Save 버튼을 누르면 viewWillAppear 함수가 정상 작동하여 메모리스트가 갱신된것을 확인할 수 있다

B vc의 꽉찬 화면
A vc에 추가된 새로운 메모

 

참조한 사이트

- stackoverflow.com/questions/56435510/presenting-modal-in-ios-13-fullscreen

 

728x90
반응형

'iOS' 카테고리의 다른 글

[Objective - C] 키보드 이벤트  (0) 2020.10.26
[Objective - C] 프로젝트 기본 설정  (0) 2020.10.20
[Objective - C] 기본 예제(종합)  (0) 2020.10.19
[Objective - C] 아카이빙  (0) 2020.10.16
[Objective-c] Collection  (0) 2020.10.16
Comments