popViewController in main_queue ??

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • popViewController in main_queue ??

    Hi.
    Es trat bei mir ein Fehler auf, den ich bisher nicht reproduzieren konnte:

    Habe ein ganz normalen NaviController.
    Im "letzten View" verändere ich properties des "vorherigen Views" (ein tableviewcontroller), etwa so:

    Quellcode

    1. NSInteger numberOfViewControllers = self.navigationController.viewControllers.count;
    2. PostGame_TableViewController *previousVC = [self.navigationController.viewControllers objectAtIndex:numberOfViewControllers - 2];
    3. NSMutableArray *newArr = [NSMutableArray arrayWithArray: previousVC.questionsAdded];
    4. [newArr addObject:[NSNumber numberWithInt:frageID]];
    5. previousVC.questionsAdded = [NSArray arrayWithArray:newArr];


    Danach möchte ich nach einem kurzen Delay (bitte fragt nicht nach sinn/unsinn :) ) wieder zum vorherigen view. mach ich so:

    Quellcode

    1. double delayInSeconds = 1.0;
    2. dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, (int64_t)(delayInSeconds * NSEC_PER_SEC));
    3. dispatch_after(popTime, dispatch_get_main_queue(), ^(void){
    4. //einen view zurück
    5. UINavigationController *navigationController = self.navigationController;
    6. [navigationController popViewControllerAnimated:YES];
    7. });
    Alles anzeigen


    Das ganze klappt bisher ohne Probleme. Jetzt trat genau 1x ein Problem auf:
    Der "vorherige" View zeigte die Tableview nicht mehr. Bildschirm zeigte nur noch die NaviBar. Dort gibt es einen Button der dann ein UnwindSegue auslöst. Dieser Button löste den Segue auch nicht aus.

    Ich vermute dass irgendwas mit den Threads nicht mehr stimmte... evtl. ist "popViewControllerAnimated:" im main_thread falsch??
    hab aber keine Ahnung! ?(

    Danke Jungs!
    PS: Fehler trat bei diesem Gerät auf: iPad Air 2 Wifi + Cell

  • danyball schrieb:

    Ich vermute dass irgendwas mit den Threads nicht mehr stimmte... evtl. ist "popViewControllerAnimated:" im main_thread falsch??

    Das ist richtig. UI-Updates immer im Main-Thread.

    Hast du mal in die Logs geschaut?

    danyball schrieb:

    Der "vorherige" View zeigte die Tableview nicht mehr. Bildschirm zeigte nur noch die NaviBar.

    Das hört sich nach einer Race-Condition oder UI-Updates an, die nicht der Main-Thread ausgelöst hat.
    „Meine Komplikation hatte eine Komplikation.“
  • -> welche Logs? die Crash-Reports auf dem Gerät?

    -> Race-C. hab ich gecheckt. Vermute ein UI-Update ausserhalb Main-Thread. Danke für deine tipps!

    2 Dinge sind mir noch aufgefallen:

    1. Könnte dieser Cast auf einem iPad Air2 evtl. Probleme machen? Eher nicht weil das Gerät ja 64Bit hat oder?

    Quellcode

    1. ​(int64_t)(delayInSeconds * NSEC_PER_SEC)


    2. kurz vor "popViewController" mach ich, ausserhalb von "get_main_queue", das hier:

    Quellcode

    1. ​[previousVC.tableView reloadData];

    --> das könnte mein fehlerhaftes ui-update sein oder?