Domanda

Sto cercando di mettere due diversi UIpopovers in una vista. Sono abbastanza nuovo per Objective-C e programmazione in generale, quindi invece di fare il metodo intelligente ed efficiente per avere un popolo e cambiare il contenuto a seconda di come viene chiamato, ho appena usato lo stupido e semplice metodo per creare Due visualizzazioni, due delegati, due popover ecc ... Non so se è per questo che ho un problema o se è per qualche altro motivo.

Quindi ecco il problema. Nel viewdidload Della vista in cui compaiono i popovers, ho questo codice:

if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) {

    optionsViewController =[[OptionsViewController alloc]init];
    optionsViewController.delegate = self;
    popoverController = [[UIPopoverController alloc] initWithContentViewController:optionsViewController];
    popoverController.popoverContentSize = CGSizeMake(320, 216);
    [popoverController setDelegate:self];

    newCurrencyViewController =[[newCurrencyViewController alloc]init];
    newCurrencyViewController.delegate = self;
    newCurrencyPopoverController = [[UIPopoverController alloc] initWithContentViewController:newCurrencyViewController];
    newCurrencyPopoverController.popoverContentSize = CGSizeMake(320, 216);
    [newCurrencyPopoverController setDelegate:self];


}

Ovviamente optionsViewController è il VC che appare all'interno di Popover 1 (con il controller di popover chiamato "PopoverController") e newCurrencyViewController è il VC che appare all'interno di Popover 2 (con il controller Popover chiamato "newCurrencyPopoverController").

Ogni volta che la vista si carica, l'app si blocca con a SIGABRT errore e la console dice:

Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[UIPopoverController initWithContentViewController:] must not be called with `nil`.'

Inoltre, c'è un avvertimento che dice "Metodo di istanza -Alloc non trovato (tipo di restituzione predefinito su ID)" per la riga che quella

saysnewCurrencyViewController =[[newCurrencyViewController alloc]init];

Il mio primo pensiero è stato che avessi scritto male il nome di un file da qualche parte, dal momento che penso che il problema sia che non sta trovando il file chiamato NewCururnIpopoverController, ma ho controllato tutto e non riesco a trovare errori di errore o altro. Qualche idea?

Grazie mille!

Luca

È stato utile?

Soluzione

Stai chiamando metodi alloc + init della tua variabile newCurrencyViewController Ma dovresti chiamarli alla classe di quella variabile!

Linea con bug:

newCurrencyViewController =[[newCurrencyViewController alloc]init];

Il risultato di questa linea sarà newCurrencyViewController == nil. E quando proverai a iniziare UIPopoverController Con questa visione si schianterà come hai descritto.

Se variabile newCurrencyViewController è di classe, ad esempio, CurrencyViewController Quindi dovresti sostituire quella linea con questa:

newCurrencyViewController =[[CurrencyViewController alloc] init];

Altri suggerimenti

Non hai un oggetto su cui chiamare Alloc e init quando chiami NewCurrenceViewController.

if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) {

    optionsViewController =[[OptionsViewController alloc]init];
    optionsViewController.delegate = self;
    popoverController = [[UIPopoverController alloc] initWithContentViewController:optionsViewController];
    popoverController.popoverContentSize = CGSizeMake(320, 216);
    [popoverController setDelegate:self];

    //Here is your problem---------------------------------------------
    newCurrencyViewController =[[newCurrencyViewController alloc]init];
    //-----------------------------------------------------------------

    newCurrencyViewController.delegate = self;
    newCurrencyPopoverController = [[UIPopoverController alloc] initWithContentViewController:newCurrencyViewController];
    newCurrencyPopoverController.popoverContentSize = CGSizeMake(320, 216);
    [newCurrencyPopoverController setDelegate:self];


}

Probabilmente vuoi qualcosa di più simile

newCurrencyViewController = [[UICurrencyViewController alloc] init];

O w/e il nome del controller di visualizzazione personalizzato è

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