0

Ich habe eine UIViewController Unterklasse namens NewsViewController, die eine Completion-Block-Eigenschaft hat, die von einer Schaltfläche Aktion aufgerufen wird. Die Steuerung ist so aufgebaut und in einer anderen Ansicht-Controller wie folgt dargestellt:disneyViewControllerAnimated funktioniert nicht in iOS 9

newsViewController.completionBlock = ^{ 
    [self dismissViewControllerAnimated:YES completion:nil]; 
}; 

UINavigationController *navigationController = [[UINavigationController alloc] initWithRootViewController:newsViewController]; 
[self presentViewController:navigationController animated:YES completion:nil]; 

In iOS 10 das alles funktioniert gut, aber in iOS 9 die Ansicht wird abgewiesen nicht zu werden. Wenn ich dort einen Haltepunkt setze, wird er getroffen.

habe ich versucht, die folgenden, ohne Erfolg:

es aus dem Haupt Thread aufgerufen (synchron und asynchron)

habe ich versucht, es GCD Verwendung wie folgt aus:

dispatch_async(dispatch_get_main_queue(), ^{ 
    [self dismissViewControllerAnimated:YES completion:nil]; 
}); 

Ich habe es auch versucht, indem ich den Entlassungsaufruf in eine Methode setzte und dann

[self performSelectorOnMainThread:@selector(dismissModalView) withObject:nil waitUntilDone:NO]; 
anruft

Ich eigentlich nicht das Problem ist der Thread seit ein Anruf an [NSThread isMainThread] aus dem Abschlussblock gibt JA zurück.

aufrufen es mit einer Verzögerung

[self performSelector:@selector(dismissModalView) withObject:nil afterDelay:0.1]; 

auf einem anderen View-Controller aufrufen entlassen

habe ich versucht, es auf navigationController, self.presentedViewController und self.presentingViewController aufrufen.

Aufruf direkt aus NewsViewController entlassen

In der Button-Aktion, wo der Abschluss-Block genannt wurde es [self dismissViewControllerAnimated:YES completion:nil] direkt aufgerufen.

Btw. nur zum Spaß habe ich versucht, die Kündigungs-Methode aus dem Completion-Block der presentViewController Methode aufzurufen und dort wurde es entlassen.

Antwort

0

Ich habe endlich das Problem liegt und es war ziemlich unerwartet. Die Sache ist, dass die NewsViewController über meine Login-View-Controller präsentiert wird. Mit diesem Controller kann sich der Benutzer über die Touch ID anmelden, so dass er die Touch ID-Eingabeaufforderung in der viewDidAppear-Methode anfordert. Scheinbar verwirrt das mit der Entlassung der vorgestellten Ansicht, und scheinbar nur in iOS 9 (naja, vielleicht nicht nur, aber es scheint in iOS 10 gut zu funktionieren).

0

Versuchen mit folgenden Code:

newsViewController.completionBlock = ^{ 
    [self performSelector:@selector(Dismiss) withObject:nil afterDelay:0.3]; 
}; 

-(void)Dismiss 
{ 
[self dismissViewControllerAnimated:YES completion:^{ 

    }]; 
} 
+0

Ich bin mir nicht sicher, was ich damit erreichen würde. Mit Ihrem Code würde ich den 'NewsViewController' erneut nach dem Ablehnen präsentieren. Dies ist nicht das, was ich überhaupt will und es würde mein Problem sowieso nicht lösen (nicht in der Lage zu sein, in erster Linie zu entlassen). – pajevic

+0

Sie müssen es nach Abschluss ablehnen, dann nur entlassen, ohne etwas im Abschlussblock. –

+0

Ihr Code würde mir einen unendlichen Zyklus geben. Im Completion-Block präsentieren Sie den gleichen View-Controller erneut. Wenn die Ansicht also geschlossen wird, wird sie erneut angezeigt. – pajevic

Verwandte Themen