iOS – Drücken der gleichen view-controller-Instanz mehr als einmal wird nicht unterstützt

Zunächst, ja, ich weiß, dies ist ein häufiges problem und diskutiert wurde, mehrere Male. Obwohl ich nicht lösen kann mir, und ich möchte Ihnen zeigen, meine stacktrace zu sehen, ob jemand von Euch eine Idee, was der Grund für diesen Absturz ist in meinem Fall.

Habe ich die Suche für jeden Aufruf für pushViewController in der ganzen app und vor dem drücken der viewController ich überprüfen, ob seine schon da:

    if (![navigationController.viewControllers containsObject: channelViewController])
    {
        [navigationController pushViewController: channelViewController animated:NO];
    }

Dies reduziert die Menge der Abstürze für meine Benutzer, wenn der Absturz passiert immer noch.

Hier der stacktrace:

Fatal Exception: NSInvalidArgumentException
Pushing the same view controller instance more than once is not supported (<ChannelViewController: 0x1b827360>)

Thread : Fatal Exception: NSInvalidArgumentException
0  CoreFoundation                 0x2280010b __exceptionPreprocess
1  libobjc.A.dylib                0x21fa6e17 objc_exception_throw
2  UIKit                          0x269d17e9 -[UINavigationController loadView]
3  UIKit                          0x26cc2271 __54-[UINavigationController pushViewController:animated:]_block_invoke
4  UIKit                          0x269d0e79 -[UINavigationController pushViewController:animated:]
5  UIKit                          0x26a3e979 -[_UIViewControllerTransitionCoordinator _applyBlocks:releaseBlocks:]
6  UIKit                          0x26a6a31d -[_UIViewControllerTransitionContext _runAlongsideCompletions]
7  UIKit                          0x26a690b1 -[_UIViewControllerTransitionContext completeTransition:]
8  UIKit                          0x26a68ed9 -[UITransitionView notifyDidCompleteTransition:]
9  UIKit                          0x26a68a4d -[UITransitionView _didCompleteTransition:]
10 UIKit                          0x26a685ef -[UITransitionView _transitionDidStop:finished:]
11 UIKit                          0x26977605 -[UIViewAnimationState sendDelegateAnimationDidStop:finished:]
12 UIKit                          0x269774ff -[UIViewAnimationState animationDidStop:finished:]
13 QuartzCore                     0x24a3ea21 CA::Layer::run_animation_callbacks(void*)
14 libdispatch.dylib              0x22379b47 _dispatch_client_callout
15 libdispatch.dylib              0x22387ee1 _dispatch_main_queue_callback_4CF$VARIANT$mp
16 CoreFoundation                 0x227c33fd __CFRUNLOOP_IS_SERVICING_THE_MAIN_DISPATCH_QUEUE__
17 CoreFoundation                 0x227c18f7 __CFRunLoopRun
18 CoreFoundation                 0x22714bf9 CFRunLoopRunSpecific
19 CoreFoundation                 0x227149e5 CFRunLoopRunInMode
20 GraphicsServices               0x23960ac9 GSEventRunModal
21 UIKit                          0x269a4ba1 UIApplicationMain
  • was ist ‚channelViewController‘ ?
  • Zeigen Sie den code der Initialisierung ‚channelViewController‘.
  • dies sehen einmal vielleicht hilft es Ihnen, stackoverflow.com/questions/7083124/…
  • bitte zeigen Sie die Umsetzung der gesamten Methode. Sind Sie instanziieren neue navigation-controller jedes mal?
  • Der navigation-controller bleibt die gleiche, die ganze Zeit.
  • Sorry, warst du jemals in der Lage zu beheben, das abgestürzt ist? Könntest du swizzle UINavigationController ist -pushViewController:animated: und fügen Sie eine Wache gegen Sie?

InformationsquelleAutor keyboard | 2016-02-15



One Reply
  1. 0
    if (![navigationController.topviewcontroller containsObject: channelViewController])
    {
        [navigationController pushViewController: channelViewController.animated:NO];
    }

    versuchen Sie dies, es wird funktionieren! Die Fehler, die Sie erhalten, nur weil channelViewController ist bereits in der navigation stack. Und dennoch, wenn Sie wollen, schieben es nur dazu:

    var topview = navigationController.topviewcontroller;
    topview.RemoveFromParentViewController();
    [navigationController pushViewController: channelViewController animated:NO];

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.