외모 전환을 시작 / 종료하기위한 불균형 통화
내 앱을 시뮬레이션 할 때이 문제가 발생합니다. 오류나 경고는 내 콘솔에 나타납니다. 이전 에이 문제를 경험 한 사람이 문제?
제 경우에는 테이블 뷰에서 두 개의 탭을 매우 빠르게 클릭하면 오류가 발생합니다.
그 결과 잘못된 제목 이름이 발생하고 뒤로 버튼이 사라집니다. 누군가를 푸시 할 때 set animated:NO
. 오류가 사라지지만 여전히 이상한 동작이 발생합니다. 두 개의 개의 뷰를 푸시 한 다음 테이블 뷰 화면으로 돌아가려면 두 번 뒤로 돌아 가야합니다.
이 문제를 해결하기 위해 시도한 방법 :
더하다 BOOL cellSelected;
에 viewWillAppear
cellSelected = YES;
didselectcell 델리게이트에서 if (cellSelected){cellSelected = NO; do action ; }
이렇게하면 두 개의 다른 셀을 매우 빠르게 클릭하는 것을 방지 할 수 있습니다.
제 경우에는 항목의 메서드 [self performSegueWithIdentifier:@"SomeIdentifier" sender:self];
내에서 트리거 할 때 발생했습니다 .UINavigationController
viewDidLoad
그것을 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:YES
NO로 설정 하면 문제 해결. 예.[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];
나는 변경 YES
A를 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
왔습니다 .NSURL
viewDidLoad
스위프트 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 |