2012-07-17 2 views
9

Sono stato bloccato con questo avviso per diverse ore. Ho guardato intorno a SO per le risposte, ho provato tutti quelli che ho trovato e non sono riuscito a trovare la soluzione. Ecco il run-down del codice che ho, che Xcode ha generato di default.Le finestre delle applicazioni dovrebbero avere un controller di visualizzazione root al termine dell'avviso di avvio dell'applicazione

Questo è a mio AppDelegate

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { 
    self.window.rootViewController = self.navigationController; 
    [self.window makeKeyAndVisible]; 
    return YES; 
} 

ho questo su main.m (secondo this answer)

int main(int argc, char *argv[]) 
{ 
    @autoreleasepool { 
     int retVal = UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class])); 
     return retVal; 
    } 
} 

Ho anche tutti i collegamenti nel mio MainWindow.xib collegato correttamente. Quindi sono in perdita in questo momento. Qualcosa che potrei mancare? Grazie in anticipo!

+1

La risposta contrassegnata come accettata per la domanda collegata è quella che ha risolto il problema per l'autore della domanda. Ci sono altre 36 risposte elencate qui, che descrivono una lista di altre possibilità. – dasblinkenlight

+0

@dasblinkenlight Questo è uno strano commento. –

+0

@robmayoff Ho provato a riformularlo per renderlo meno strano. La domanda che l'OP ha collegato ha molte risposte, ognuna delle quali descrive un problema diverso che porta allo stesso avvertimento e ai modi per risolverlo. L'OP accenna a risolvere il problema come descritto nella risposta accettata, ma non sembra che abbia provato altre 36 raccomandazioni. – dasblinkenlight

risposta

19

È strano impostare l'rootViewController della finestra in application:didFinishLaunchingWithOptions: se si dispone di un MainWindow.xib. Di solito un progetto segue uno dei tre modelli:

  • Alcuni progetti hanno un MainWindow.xib. La "Main Interface" del target è impostata su "MainWindow" nella scheda Summary del target (o nel suo Info.plist). Il proprietario del file di xib è UIApplication. Lo xib contiene un'istanza di AppDelegate, collegata alla presa delegate del proprietario del file. Lo xib contiene anche uno UIWindow, la cui presa rootViewController è collegata a uno UIViewController (o sottoclasse, come UINavigationController), anch'esso nello xib. Nel momento in cui il delegato dell'applicazione riceve il messaggio application:didFinishLaunchingWithOptions:, lo xib viene interamente caricato, quindi la finestra e il relativo controller di visualizzazione radice sono già impostati.

  • Altri progetti non dispongono di MainWindow.xib. La "Main Interface" del target è vuota. Invece, la funzione UIApplicationMain crea un'istanza di AppDelegate, la imposta come delegato di UIApplication e la invia al messaggio application:didFinishLaunchingWithOptions:. Il delegato dell'app gestisce il messaggio creando un UIWindow, creando un controller di visualizzazione (o diversi) e impostando la proprietà rootViewController della finestra. La versione predefinita appare così:

    - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
    { 
        self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; 
        // Override point for customization after application launch. 
        self.viewController = [[ViewController alloc] initWithNibName:@"ViewController" bundle:nil]; 
        self.window.rootViewController = self.viewController; 
        [self.window makeKeyAndVisible]; 
        return YES; 
    } 
    
  • Alcuni progetti hanno un MainStoryboard.storyboard. Non ho intenzione di descriverlo in dettaglio perché non sembra rilevante per il tuo problema.

Il problema che stai descrivendo fa sembrare che stai utilizzando metà del primo modello e metà del secondo modello. Quello non funzionerà. Devi decidere quale approccio stai prendendo e andare all-in.

2

È possibile aprire il file xib e fare clic con il pulsante destro del mouse su "Proprietario file" in Segnaposto. Se la vista non si collegava a View outlet, tieni premuto il tasto "Ctrl" e trascina il tasto destro del mouse per disegnare, quindi esegui di nuovo ^^ (non trascinare su un particolare controllo, trascina il disegno dello sfondo quando appare la vista del bordo).

0

devo risolvere problema nel mio progetto, attenersi alla seguente procedura per risolvere esso ..

1) aprire il file pennino in vista controller principale, che file che avete di riferimento in appDelegate eg.ViewCotroller.xib

2) Sul file di pennino controllare la connessione di visualizzazione, se non connesso al proprietario del file, quindi collegarlo.

3) Ora eseguire il progetto.

1

Ho questo messaggio perché ho avuto nel mio RootViewController @property (debole, non anatomico) IBOutlet UIView * loadView; e viewDidLoad è stato chiamato due volte ... Rinominalo in qualcos'altro ...