IT

외모 전환을 시작 / 종료하기위한 불균형 통화

lottoking 2020. 9. 3. 20:43
반응형

외모 전환을 시작 / 종료하기위한 불균형 통화


내 앱을 시뮬레이션 할 때이 문제가 발생합니다. 오류나 경고는 내 콘솔에 나타납니다. 이전 에이 문제를 경험 한 사람이 문제?


제 경우에는 테이블 뷰에서 두 개의 탭을 매우 빠르게 클릭하면 오류가 발생합니다.

그 결과 잘못된 제목 이름이 발생하고 뒤로 버튼이 사라집니다. 누군가를 푸시 할 때 set animated:NO. 오류가 사라지지만 여전히 이상한 동작이 발생합니다. 두 개의 개의 뷰를 푸시 한 다음 테이블 뷰 화면으로 돌아가려면 두 번 뒤로 돌아 가야합니다.

이 문제를 해결하기 위해 시도한 방법 :

더하다 BOOL cellSelected;

viewWillAppear cellSelected = YES;

didselectcell 델리게이트에서 if (cellSelected){cellSelected = NO; do action ; }

이렇게하면 두 개의 다른 셀을 매우 빠르게 클릭하는 것을 방지 할 수 있습니다.


제 경우에는 항목의 메서드 [self performSegueWithIdentifier:@"SomeIdentifier" sender:self];내에서 트리거 할 때 발생했습니다 .UINavigationControllerviewDidLoad

그것을 viewDidAppear방법 으로 옮기면 문제가 해결되었습니다.

그 이유는 viewDidLoad모든 멋진 애니메이션이 이미 완벽하게 모든 것이 완료 viewDidAppear되었습니다.


나도이 문제가있다. 이 문제에 대한 두 가지 해결책을 찾았습니다.

  1. 이 솔루션은 위에서 볼 수 있습니다.
  2. 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)
}

참고 URL : https://stackoverflow.com/questions/6809593/unbalanced-calls-to-begin-end-appearance-transitions-for-firstviewcontroller-0

반응형