iPhone SDK: Løs [UINavigationController pushViewController:] ukjent velgeren sendt til instance

iPhone SDK: Løs [UINavigationController pushViewController:] ukjent velgeren sendt til eksempel

Jeg elsker koding til iPhone SDK. Det er den mest gledelige koding jeg har gjort i kvart århundre (gisp!) Jeg har brukt koding ulike datasystemer. Det er en kombinasjon av Objective-C (elegant) og Cocoa (vakker). Det er ett unntak jeg får stadig og bare sjelden nok til at jeg glemmer hvorfor jeg får det. Jeg trodde at noen kan ha nytte av dette fordi det er en enkel felle å falle i
Unntaket i spørsmålet.

*** Avslutte app grunn uoppfanget unntak 'NSInvalidArgumentException', på grunn av: '*** - [UINavigationController pushViewController:]: ukjent velgeren sendt til eksempel 0x5255c0'

Hvis du bruker navigasjons-basert applikasjon mal når du oppretter et nytt prosjekt, får du et sett med prosjektfiler som får du en god bit av veien mot en funksjonell applikasjon. Faktisk kan du treffer bygge og gå og applikasjonen vil kompilere, kjøre og vise deg en ganske tabellvisning. Du vil sannsynligvis deretter legge koden for å gjøre bordet visningsskjerm ting i cellene, testing underveis, og det vil fungere. På et tidspunkt, kan det være lurt å lage innslag på cellene åpner en ny visning. Malen gir et eksempel metoden "didSelectRowAtIndexPath" vises her:

- (void) Tableview: (UITableView *) Tableview didSelectRowAtIndexPath: (NSIndexPath *) indexPath {
//Navigation logikk kan gå her. Lag og presse en annen visning controller
//AnotherViewController * anotherViewController = [[AnotherViewController Alloc] initWithNibName: @ "AnotherView" bundle: null];
//[self.navigationController pushViewController: anotherViewController];.
//[anotherViewController utgivelse];
}

metoden i seg selv er ikke kommentert ut, men alle instruksene i den er. Disse kommen linjene gir en anelse om hva som skulle skje. Linjen

[self.navigationController pushViewController: anotherViewController];

er nøkkelen til både drift av denne metoden, og årsaken til feilen. Den skyver et nytt syn kontrolleren på navigasjons stabelen og viser det, akkurat hva du vil den skal gjøre. Men hvis du uncomment denne linjen, og justere den til å bruke den nye visningen kontrolleren du har opprettet, får du en advarsel når du bygger det: "advarsel: 'UINavigationController" kan ikke svare på -pushViewController: "Men, vel dette er en advarsel, ikke en feil. Pshaw. Kjør det, skjønt, og du får feil vist ovenfor, og ukjent velger sendt til en forekomst.

Hvis det du har lest så langt høres kjent ut, er enkel den sannsynlige løsningen. Linjen ovenfor fra Apple-tilgjengelige malen er galt. Det faktisk ikke er en meldingssignatur for UINaigationController heter -pushViewController: men det er en som heter -pushViewController: animert: - Oops! Sorry Apple! Vi elsker deg fortsatt, skjønt. Veldig lett å fikse, men hvis det skjer etter en lang dag med koding, kan det føre til unødig frustrasjon. Den korrigerte linjen skal se omtrent slik ut:

[self.navigationController pushViewController: anotherViewController animerte: YES];

Bygg og denne feilen vil bli løst! Hvis dette var problemet. Hvis det ikke var, så fortvil ikke. Dekryptering unntaksmeldinger er en del av moroa del av livsstilen til coderdom. En "ukjent velgeren" er fortsatt kommer til å referere til meldingen du sender "til eksempel" et objekt som du har opprettet. Unntaket forteller oss selv hvilken klasse av objektet som mottar den rare melding (UINavigationController i dette tilfellet) og meldingen som ble sendt (pushViewController :). I dette tilfellet visste kompilatoren at det var noe ekkelt om meldingen ble sendt, men det kan ikke alltid være i stand til å avgjøre dette, så du kan ikke stole på det. Imidlertid bør du være i stand til å søke koden for meldingen rapportert i unntaket fra konsollen loggen. Sørg for at alt er riktig i denne linjen sjekke i dokumentasjonen for det nøyaktige innholdet i samtalen.