Domanda

Sto cercando di implementare la funzionalità della fotocamera dal vivo nella mia applicazione iPhone e sto funzionando nei guai. Fondamentalmente, il modo in cui è strutturato è questo:. Fornisco un UINavigationController cui l'utente può navigare a un'immagine con una vista tavolo e (su scegliendo uno) una vista di dettaglio

Si possono quindi fare clic su un pulsante e scattare una nuova foto con la fotocamera. Idealmente, ciò che dovrebbe accadere è che dopo aver preso la foto o l'annullamento vanno di nuovo alla radice di navigazione in cui le immagini sono elencati di nuovo. Per questo, io sono l'attuazione del delegato UIImagePickerController nel mio principale regolatore vista dettagliata.

Tutto questo è implementata bene, tranne che l'ultimo pezzo - posso accedere alla foto, ecc, ma quando si tenta di tornare a quel primo elenco - con popToRootViewControllerAnimated - ottengo un errore EXC_BAD_ACCESS. Ecco una versione ridotta del relativo codice ( didFinishPickingMediaWithInfo ... imagePickerControllerDidCancel funziona allo stesso modo):

- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info {

    // Do some image processing stuff here...

    [picker dismissModalViewControllerAnimated:YES];
    [picker release];

    [self.navigationController popToRootViewControllerAnimated:YES];    
}

Commentando che ultima riga lo fa funzionare, ma poi si va solo indietro alla vista di dettaglio con la foto originale, non l'elenco.

Chiunque?

Aggiorna : Un dettaglio ho trascurato di menzionare prima ... Il pop non, infatti, sembra funzionare ad un grado. Il selettore della fotocamera è respinto e va di nuovo alla lista. Tuttavia, in quel momento che l'applicazione muore (la cella di tabella selezionata è ancora blu, da cui l'utente sfruttato prima). Ho anche provato ad utilizzare popViewControllerAnimated invece con lo stesso identico risultato.

È stato utile?

Soluzione

Spero che questo non è troppo tardi per voi. Ho appena incontrato lo stesso problema questa sera e sbattuto la testa contro il mio MBP per circa 30 minuti prima che ho cominciato ad avere un po 'di creatività.

Ho trovato due modi per fare questo lavoro. Né è intuitivo, ma qui si va. In sostanza, sembra che il problema potrebbe essere causato dal fatto che si sta chiamando "pop" sul navigationController prima il "respingere" l'animazione è terminata.

ho scoperto che se ho impostato il booleano animazione sul respingere "NO", quindi ha funzionato.

per es.

[picker dismissModalViewControllerAnimated:**NO**];

Un'altra opzione è quella di creare un secondo metodo che chiama in realtà la funzione "pop", e chiamare utilizzando un timer con una breve offset. Quanto basta per respingere l'animazione per l'esecuzione.

per es.

-(void)popMe {
    [self.navigationController popToRootViewControllerAnimated:YES];
}

- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info {
    [picker dismissModalViewControllerAnimated:YES];
    [picker release];

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

Che tempi ha lavorato per me, potrebbe essere necessario modificare.

Speranza che aiuta!

  • Andrew

Altri suggerimenti

problema qui è [picker dismissModelViewController] e [rilascio picker] credo ... Non è necessario rilasciare il selettore, è releasedd per u quando u respingere il controller di vista modale credo (che si arent facendo correttamente da quello che posso s ee) ... uno che o si ha un conteggio di riferimento pari a 0 e non deve essere rilasciare, in entrambi i casi mi ricordo facendo qualcosa di simile e averlo in crash perché ho rilasciato il selettore ... Inoltre ho notato che si stanno avendo il selettore respingere il View Controller modale, sei sicuro che questo è ciò che si sta cercando di fare? Non [sé dismissModalViewController] o che mai ViewController ti ha spinto questo punto di vista su?

La risposta:
Utilizzare questa: [self.navigationController dismissModalViewControllerAnimated: YES]; codice invece di [picker dismissModalViewControllerAnimated: YES];
Ora, è possibile rimuovere questa riga dal codice: [self.navigationController popToRootViewControllerAnimated: YES];

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top