Ho questo problema quando simulo la mia app, non è un errore o un avviso ma appare nella mia console, qualcuno l'ha mai sperimentato prima?
Ho questo problema quando simulo la mia app, non è un errore o un avviso ma appare nella mia console, qualcuno l'ha mai sperimentato prima?
Risposte:
Nel mio caso, questo errore si verifica quando fai clic su due schede in una visualizzazione tabella molto velocemente.
Il risultato causa il nome del titolo errato e il pulsante Indietro scompare. Qualcuno ha detto che quando si spinge una vista set animated:NO
,. L'errore scomparirà ma causerà comunque uno strano comportamento. Spinge due visualizzazioni, quindi è necessario tornare indietro due volte per tornare alla schermata di visualizzazione della tabella.
Metodo che ho provato per risolvere questo problema:
Inserisci BOOL cellSelected;
nel viewWillAppear
cellSelected = YES;
in didselectcell delegate if (cellSelected){cellSelected = NO; do action ; }
Ciò aiuta a evitare di fare clic su due celle diverse molto velocemente.
Nel mio caso è successo quando ho attivato il trigger [self performSegueWithIdentifier:@"SomeIdentifier" sender:self];
all'interno UINavigationController
del viewDidLoad
metodo di un articolo .
Il passaggio al viewDidAppear
metodo ha risolto il problema.
La ragione molto probabile è che viewDidLoad
non tutte le fantasiose animazioni sono già state completate, mentre in viewDidAppear
tutto è stato fatto.
Anch'io ho questo problema. Ho trovato due soluzioni a questo problema:
UINavigationController
cui questo problema è stato risolto. Controller di navigazione con bufferDovresti eseguire il codice in un ciclo diverso per evitare ciò
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];
});
dispatch_async
coda principale. Il dispatch_async
problema è che attende fino a quando tutte le altre animazioni sulla coda principale sono state completate. è molto meglio che usare un ritardo perché: 1- non saprai mai se un ritardo è sufficiente, dipende dal tuo dispositivo host 2- finirai per esagerare con il ritardo e qualcosa andrà in ritardo. prova questo:dispatch_async(dispatch_get_main_queue(), ^{[self presentViewController:self.yourModalVC animated:YES completion:nil];});
Ho avuto molti problemi con lo stesso problema. L'ho risolto in questo modo
1) Non stai utilizzando l' UIViewController's
inizializzatore designato initWithNibName:bundle:
. Prova a usarlo invece di solo init
.
2) impostato animated:YES
su NO e questo ha risolto il problema. per esempio.[self.navigationController pushViewController: viewController_Obj animated:NO];
Ho avuto lo stesso problema usando il controller di navigazione e spingendo altri controller ad esso. Ho provato a utilizzare Buffered Navigation Controller e molti altri approcci, ma non ha funzionato per me. Dopo aver speso un po 'di tempo per capirlo, ho notato che questo problema si verifica se si tenta di spingere il nuovo controller di visualizzazione mentre la transazione precedente (animazione) è in corso (circa 0,5 secondi di durata immagino). Ad ogni modo, ho fatto una soluzione rapida delegando il controller di navigazione e aspettando la fine dell'animazione precedente.
Assicurati di non dimenticare di in -viewWillAppear, -viewDidAppear, -viewDidLoad, -viewWillDisappear, -viewDidDisappear per chiamare il super metodo appropriato nel tuo sovraccarico di quei metodi. Ad esempio, nel mio caso il nome del metodo non corrisponde in questo modo:
-(void)viewDidAppear
{
[super viewDidDisappear];
//some code staff
..
}
notare che i metodi di visualizzazione e di scomparsa non corrispondono
super.viewWillAppear()
dentro viewDidDisappear()
.
"Chiamate sbilanciate per iniziare / terminare le transizioni di presenza per"
Dice che un'animazione viene avviata prima che l'ultima animazione correlata non venga completata. Quindi, stai aprendo un controller di visualizzazione prima di spingere quello nuovo? O potrebbe scoppiare alla radice? se sì, prova a farlo senza animazione, ad es[self.navigationController popToRootViewControllerAnimated:NO];
E vedi se questo risolve il problema, nel mio caso questo ha funzionato.
Ho riscontrato questo problema perché stavo chiamando un UIPrintInteractionController da un viewController senza UITabbar e né UINavigationBar. Sembra che UIPrintInteractionController non abbia ottenuto il printInteractionControllerParentViewController corretto. L'implementazione del metodo nel delegato e la restituzione dell'attuale rootViewController ha funzionato per me.
- (UIViewController*)printInteractionControllerParentViewController:(UIPrintInteractionController*)printInteractionController;
Ho avuto un problema simile che riguardava il riavvolgimento delle finestre di dialogo modali. Ha pubblicato la soluzione qui ...
https://stackoverflow.com/a/38795258/324479
[Problema]
Nav Controller -> VC1 -Push -> VC2 -PopOver o Modal Segue -> VC3.
VC3 sta tornando a VC1.
Quando il Segue da VC2 a VC3 è PopOver e Modal, lo svolgimento termina con un avviso: chiamate sbilanciate per iniziare / terminare le transizioni di comparsa per UIViewController "
Se il Segue da VC a VC è premuto, l'avviso scompare.
[Soluzione]
Sarebbe fantastico se la logica di svolgimento si occupasse di questo. Forse è un bug, forse no. In ogni caso, la soluzione è rendere VC2 (il controller che ha il popup) l'obiettivo del riavvolgimento, quindi attendere che finisca di apparire prima di far apparire il controller di navigazione. Ciò garantisce che l'animazione di riavvolgimento (popup inverso) abbia tempo sufficiente per terminare prima di tornare indietro. Anche con le animazioni disattivate, deve ancora attendere altrimenti si ottiene l'errore.
Il codice per VC2 dovrebbe essere il seguente. (Swift)
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)
}
}
}
La situazione può verificarsi se si aggiunge una vista con un controller di visualizzazione modale come vista secondaria. Meglio usare:
-(void) viewDidAppear:(BOOL)animated {
[self presentViewController:self.yourModalVC animated:YES completion:nil];
}
In pratica sta dicendo che il ciclo di vita della vista non è ottimizzato per quei viewController che stai cercando di visualizzare in quel momento.
Ho lo stesso problema quando ho usato il metodo pop di navigationcontroller Nella mia app utilizzo una logica separata per il controller di navigazione, quindi ho evitato l'uso della barra di navigazione ed è sempre nascosto. Quindi utilizzo una visualizzazione personalizzata e una notifica per gestire il pulsante Indietro e i suoi eventi. gli osservatori di notifica vengono registrati e non rimossi. Quindi la notifica si attiva due volte e crea l'errore sopra menzionato. Controlla attentamente il tuo codice per ottenere tali errori
Per quello che vale, ho ricevuto lo stesso errore quando non includevo una chiamata a [super viewDidLoad:animated]
nel mio viewDidLoad
override.
Ho anche avuto questo problema quando ho toccato un pulsante da un pennino. Si scopre che avevo accidentalmente cablato il pulsante per inviare un evento a due metodi IBAction, ognuno dei quali ha eseguito un pushViewController: animato:
Ho implementato una logica per aspettare che spinga UIViewController
fino a quando tutti i dati sono stati scaricati. Si è verificato un errore in questa logica che ha causato il push UIViewController
troppo presto mentre era ancora in corso un'altra chiamata API.
Ha fatto sì che lo stesso UIViewController
fosse spinto due volte da UINavigationController
e ha dato questo avvertimento.
Motivo Per messaggio: Questo messaggio ottiene visualizzato se e solo se si sta spingendo / presentare un altro controller Vista da viewWillAppear
, loadView
, init
o viewDidLoad
il metodo della corrente di controllo View
Modo per rimuovere il messaggio di errore: spostare il codice di invio / presentazione sul viewDidAppear
metodo risolverà il problema
Swift 4
Il mio problema era che stavo presentando un altro VC prima che il mio attuale finisse di essere renderizzato.
La soluzione era presentare il mio prossimoVC dopo un breve ritardo.
COSA NON DEVI FARE
override func viewDidLoad() {
super.viewDidLoad()
self.present(MyNextVC(), animated: true, completion: nil)
}
COSA DOVRESTI FARE
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)
}
Ho avuto questo problema quando ho dimenticato di impostare Break; dopo aver premuto la vista in un'istruzione switch!
Come qui:
case 1:{
SomeViewController *someViewController = [[SomeViewController alloc]initWithNibName:@"SomeViewController" bundle:Nil];
[self.navigationController pushViewController:someViewController animated:YES];
[someViewController release];
}
break; //Forgetting to set break here:
una soluzione sarebbe,
[NSTimer scheduledTimerWithTimeInterval:0.05(or as required) target:self
selector:@selector(your_selector_method_to_push_the_view) userInfo:nil repeats:NO];
Puoi imbatterti in questo se provi a chiudere un UIViewController prima che abbia terminato il caricamento.
Avevo questo messaggio nella console e mi stavo concentrando interamente sull'UIViewController che presentava il nuovo UIViewController, senza successo. Alla fine ho scoperto che il problema era nell'UIViewController che stavo presentando si chiudeva da solo perché l'utente non aveva effettuato l'accesso al proprio account.
Spero che questo aiuti qualcuno.
Questa è stata dura per me: l'ho ignorata
override func shouldAutomaticallyForwardRotationMethods() -> Bool {
return true
}
senza sovrascrivere:
override func shouldAutomaticallyForwardAppearanceMethods() -> Bool {
return true
}
nel mio controller di navigazione root della finestra. quindi un controller di navigazione figlio si è lamentato quando spingeva un altro controller di visualizzazione con l'avvertimento di cui sopra. L'avvertimento non era il peggiore, il grosso problema era che lì il delegato del controller di navigazione figlio non veniva più chiamato. weired.