외모 전환을 시작 / 종료하기위한 불균형 통화
내 앱을 시뮬레이션 할 때이 문제가 발생합니다. 오류나 경고는 내 콘솔에 나타납니다. 이전 에이 문제를 경험 한 사람이 문제?
제 경우에는 테이블 뷰에서 두 개의 탭을 매우 빠르게 클릭하면 오류가 발생합니다.
그 결과 잘못된 제목 이름이 발생하고 뒤로 버튼이 사라집니다. 누군가를 푸시 할 때 set animated:NO. 오류가 사라지지만 여전히 이상한 동작이 발생합니다. 두 개의 개의 뷰를 푸시 한 다음 테이블 뷰 화면으로 돌아가려면 두 번 뒤로 돌아 가야합니다.
이 문제를 해결하기 위해 시도한 방법 :
더하다 BOOL cellSelected;
에 viewWillAppear cellSelected = YES;
didselectcell 델리게이트에서 if (cellSelected){cellSelected = NO; do action ; }
이렇게하면 두 개의 다른 셀을 매우 빠르게 클릭하는 것을 방지 할 수 있습니다.
제 경우에는 항목의 메서드 [self performSegueWithIdentifier:@"SomeIdentifier" sender:self];내에서 트리거 할 때 발생했습니다 .UINavigationControllerviewDidLoad
그것을 viewDidAppear방법 으로 옮기면 문제가 해결되었습니다.
그 이유는 viewDidLoad모든 멋진 애니메이션이 이미 완벽하게 모든 것이 완료 viewDidAppear되었습니다.
나도이 문제가있다. 이 문제에 대한 두 가지 해결책을 찾았습니다.
- 이 솔루션은 위에서 볼 수 있습니다.
UINavigationController이 문제가 해결 된 하위 클래스를 찾았 습니다 . 버퍼링 된 탐색 컨트롤러
이를 방지하는 다른 루프에서 코드를 실행해야합니다.
double delayInSeconds = 0.1;
dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, delayInSeconds * NSEC_PER_SEC);
dispatch_after(popTime, dispatch_get_main_queue(), ^(void){
// Put your code here
[self presentViewController:self.yourModalVC animated:YES completion:nil];
});
나는 같은 문제에 많은 문제가 있었다. 나는 이것을 이렇게 해결했다
1) UIViewController's지정된 이니셜 라이저를 사용하고 있지 않습니다 initWithNibName:bundle:. 대신 사용하십시오 init.
2) animated:YESNO로 설정 하면 문제 해결. 예.[self.navigationController pushViewController: viewController_Obj animated:NO];
내비게이션 컨트롤러를 사용하여 동일한 문제가 발생하고 푸시했습니다. 버퍼링 된 탐색 컨트롤러 와 여러 가지 접근 방식 을 사용했습니다 . 그것을 알아내는 데 데의 시간을 보낸 후 이전 트랜잭션 (애니메이션)이 진행되는 동안 새 뷰 컨트롤러를 강화하면이 문제가 발생한다는 것을 알았습니다 (약 0.5 초 지속 시간). 어쨌든 내비게이션을 도입하고 이전 애니메이션이 끝날 때까지 기다리면서 빠른 솔루션을 만들었습니다.
-viewWillAppear, -viewDidAppear, -viewDidLoad, -viewWillDisappear, -viewDidDisappear에서 해당 메서드의 오버로드에서 적절한 수퍼 메서드를 호출하는 것을 잊지 않습니다. 예를 들어 제 경우에는 다음과 같이 메서드 이름이 일치하지 않습니다.
-(void)viewDidAppear
{
[super viewDidDisappear];
//some code staff
..
}
통지 -display 하고 사라 방법은 일치 여부하지 않는
''에 대한 외모 전환 시작 / 종료를위한 불균형 통화
마지막 관련 애니메이션이 완료되기 전에 애니메이션이 시작된다고. 그래서, 당신은 새로운 것을 밀기 전에 뷰 컨트롤러를 터 뜨리고 있습니까? 아니면 뿌리를 내릴 수 있습니까? 사용 애니메이션없이 시도해.[self.navigationController popToRootViewControllerAnimated:NO];
그리고 이것이 문제를 해결하는지 확인하십시오. 제 경우에는 이것이 트릭이었습니다.
이유는 메시지에 대해 : 이 메시지가 표시 얻을 경우, 당신은 밀어 경우에만 /에서 또 다른 뷰 컨트롤러를 제시 viewWillAppear, loadView, init또는 viewDidLoad방법은 현재보기 컨트롤러의
오류 메시지를 제거하는 방법 : 푸시 / 코드를 제시 viewDidAppear메서드로 이동 하면 문제가 해결됩니다.
UITabbar가없고 UINavigationBar도없는 viewController에서 UIPrintInteractionController를 호출했기 때문에 문제가 발생했습니다. UIPrintInteractionController가 올바른 printInteractionControllerParentViewController를 얻지 못한 것입니다. 대리자에서 메서드를 구현하고 현재 rootViewController를 반환하면 나를 위해 일했습니다.
- (UIViewController*)printInteractionControllerParentViewController:(UIPrintInteractionController*)printInteractionController;
모달 대화 상자 되감기와 관련된 문제가 있습니다. 여기에 솔루션 게시 ...
https://stackoverflow.com/a/38795258/324479
[문제]
Nav 컨트롤러-> VC1 -Push-> VC2 -PopOver 또는 Modal Segue-> VC3.
VC3가 VC1로 다시 풀립니다.
VC2에서 VC3 로의 Segue가 PopOver 및 Modal이면 해제가 경고로 끝납니다. UIViewController에 대한 모양 전환을 시작 / 종료하기위한 불균형 호출 "
VC에서 VC 로의 Segue가 푸시되면 경고가 사라집니다.
[해결책]
풀기 로직이 이것을 처리한다면 좋을 것입니다. 버그 일 수도 있고 아닐 수도 있습니다. 어느 쪽이든 해결 방법은 VC2 (팝업이있는 컨트롤러)를 되감기 대상으로 만든 다음 탐색 컨트롤러를 팝업하기 전에 표시 될 때까지 기다리는 것입니다. 이렇게하면 되감기 (역 팝업) 애니메이션이 더 뒤로 이동하기 전에 완료 할 시간이 충분합니다. 애니메이션이 꺼져 있어도 여전히 기다려야합니다. 그렇지 않으면 오류가 발생합니다.
VC2의 코드는 다음과 같아야합니다. (빠른)
class VC2: UIViewController {
private var unwind = false
@IBAction func unwindToVC1(segue:UIStoryboardSegue) {
unwind = true
}
override func viewWillAppear(animated: Bool) {
super.viewWillAppear(animated)
if unwind {
self.navigationController?.popViewControllerAnimated(false)
}
}
}
모달 뷰 컨트롤러가있는 뷰를 하위 뷰로 추가하는 경우 상황이 발생할 수 있습니다. 사용하기 가장 좋은 방법 :
-(void) viewDidAppear:(BOOL)animated {
[self presentViewController:self.yourModalVC animated:YES completion:nil];
}
기본적으로 표시하려는 viewController에 대해 뷰 라이프 사이클이 간소화되지 않았다는 의미입니다.
할 때 비슷한 문제가 있습니다.
[self.navigationController popToViewController:[self.navigationController.viewControllers objectAtIndex:2] animated:YES];
와 같은 함수에서 함수 끝에 - (void) popUpToLevelTwo;a를 넣으면 return;문제가 해결됩니다.
나는 또한 이것을 얻었다
[self dismissModalViewControllerAnimated:YES];
나는 변경 YESA를 NO, 그 문제를 해결했다.
내 앱에서 내비게이션 컨트롤러의 팝 메소드를 사용할 때도 같은 문제가 발생합니다. 내 앱에서 내비게이션 컨트롤러에 별도의 로직을 사용하므로 내비게이션 바 사용을 피하고 항상 숨겨져 있습니다. 그런 다음 뒤로 버튼과 이벤트를 처리하기 위해 사용자 정의보기 및 알림을 사용합니다. 알림 관찰자는 등록되며 제거되지 않습니다. 따라서 알림이 두 번 실행되고 위에서 언급 한 오류가 발생합니다. 그러한 결함을 얻기 위해 코드를 철저히 확인하십시오.
무엇의 가치를 위해, 나는에 대한 호출을 포함하지 않는이 같은 오류가있어 [super viewDidLoad:animated]내에서 viewDidLoad재정을.
NIB에서 버튼을 탭했을 때도이 문제가 발생했습니다. 실수로 두 개의 IBAction 메서드에 이벤트를 보내기 위해 버튼을 연결했는데, 각각은 pushViewController : animated를 수행했습니다.
UIViewController모든 데이터가 다운로드 될 때 까지 푸시를 기다리는 로직을 구현했습니다 . 이 로직에 오류 UIViewController가있어서 아직 다른 API 호출이 진행중인 동안 너무 일찍 푸시했습니다 .
그것은 같은 UIViewController것을에 의해 두 번 밀고이 UINavigationController경고를 주었다.
Break 설정을 잊었을 때이 문제가 발생했습니다. switch 문에서 뷰를 푸시 한 후!
여기처럼 :
case 1:{
SomeViewController *someViewController = [[SomeViewController alloc]initWithNibName:@"SomeViewController" bundle:Nil];
[self.navigationController pushViewController:someViewController animated:YES];
[someViewController release];
}
break; //Forgetting to set break here:
"모양 전환을 시작 / 종료하기위한 불균형 호출"오류의 원인은 탐색 할 때 | 동시에 두 번 segue
한 가지 해결책은
[NSTimer scheduledTimerWithTimeInterval:0.05(or as required) target:self
selector:@selector(your_selector_method_to_push_the_view) userInfo:nil repeats:NO];
로드가 완료되기 전에 UIViewController를 닫으려고하면이 문제가 발생할 수 있습니다.
콘솔에이 메시지가 있었고 성공하지 못한 채 새로운 UIViewController를 제공하는 UIViewController에 전적으로 집중하고있었습니다. 나는 마침내 사용자가 자신의 계정에 로그인하지 않았기 때문에 내가 제시 한 UIViewController에 문제가 있다는 것을 발견했습니다.
이것이 누군가를 돕기를 바랍니다.
이것은 나에게 힘든 일이었습니다. 나는 재정의했습니다.
override func shouldAutomaticallyForwardRotationMethods() -> Bool {
return true
}
재정의하지 않고 :
override func shouldAutomaticallyForwardAppearanceMethods() -> Bool {
return true
}
내 창 루트 탐색 컨트롤러에서. 그런 다음 위에서 언급 한 경고와 함께 다른 뷰 컨트롤러를 푸시 할 때 자식 탐색 컨트롤러가 불평했습니다. 경고는 최악이 아니었고 큰 문제는 자식 탐색 컨트롤러의 대리인이 더 이상 호출되지 않았다는 것입니다. 이상해.
제 경우에는 ' '메서드 내부 에서 가져 NSData왔습니다 .NSURLviewDidLoad
스위프트 4
내 문제는 현재 렌더링이 완료되기 전에 다른 VC를 제시하고 있었다는 것입니다.
해결책은 빠른 지연 후 내 nextVC를 제시하는 것이 었습니다.
하지 말아야 할 일
override func viewDidLoad() {
super.viewDidLoad()
self.present(MyNextVC(), animated: true, completion: nil)
}
해야 할 일
override func viewDidLoad() {
super.viewDidLoad()
//Wait until the view finished to be constructed
perform(#selector(showMyNextVC), with: nil, afterDelay: 0.01)
}
@objc func showCityList() {
self.present(MyNextVC(), animated: true, completion: nil)
}
'IT' 카테고리의 다른 글
| 데이터 리더에서 데이터 테이블 채우기 (0) | 2020.09.04 |
|---|---|
| 한 줄에있는 단어 사이에 둘 이상의 공백이있는 항목을 검색하는 방법 (0) | 2020.09.03 |
| 스칼라 상수에 대한 명명 규칙? (0) | 2020.09.03 |
| H 또는 CPP 파일에서 내부 라이브러리에 대한 doxygen 주석 블록을 어디에 둘? (0) | 2020.09.03 |
| Chai : 'should'구문으로 undefined를 테스트하는 방법 (0) | 2020.09.03 |