2010-12-11 6 views
4

Wenn ich den Code unten im Simulator ausführen, erwarte ich, dass rot den Bildschirm ausfüllt, aber stattdessen ist alles schwarz, warum?uiview wird nicht im App-Delegaten angezeigt

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { 
    UIView * myView = [[UIView alloc] initWithFrame:[window bounds]]; 
    [myView setBackgroundColor:[UIColor redColor]]; 
    [window addSubview:myView]; 
    [window makeKeyAndVisible]; 
    return YES; 
} 

Wenn ich hinzufügen Initialisierung Fenster, das nicht hilft:

window = [[[UIWindow alloc] init] initWithFrame:[[UIScreen mainScreen] bounds]]; 

Meine Probleme begonnen, als nach einem Window-basierten Universal-Projekt in Xcode Schaffung ich das iPad/iPhone xib löschen entschieden Dateien und die iPhone/iPad-App delegieren Dateien, die automatisch im Projekt erstellt wurden, und stattdessen über einen einzelnen Anwendungsdelegaten mit einem Ansichtscontroller verfügen, der die Ansicht programmgesteuert auf dem Gerät erstellt. Jetzt kann ich keine einfache Ansicht anzeigen, die ich im App-Delegaten erstellt habe.

Bearbeiten: Ich habe das Hinzufügen einer Ansicht entfernt und jetzt die Hintergrundfarbe des Fensters auf rot gesetzt. Das hilft nicht, aber wenn ich im Simulator auf den Desktop gehe und die laufende App wieder öffne, bekomme ich jetzt einen roten Bildschirm. Wieder bin ich verwirrt darüber, warum ich beim ersten Start der App nicht rot sehe.

Antwort

8

Hier sind die Schritte zum Einrichten eines universellen iOS-Projekts ohne InterfaceBuilder (.xib).

  1. Löschen Sie alle Zuordnungen zu den .xib-Dateien in Ihrer Eigenschaftsliste für die Anwendung. Delete the .xib file references from your application plist

  2. Löschen Sie die alle .xib Dateien aus dem Projekt

  3. (Optional) eine gemeinsame Anwendung Delegate-Klasse erstellen und dann die AppDelegate_iPad löschen. * Und die AppDelegate_iPhone. * Dateien. (Kopieren Sie vor dem Löschen einen beliebigen Code aus den vorhandenen Dateien.)
  4. Ändern Sie die Datei main.m, um den Anwendungsdelegaten zu benennen. Ich habe beschlossen, das AppDelegate_iPhone zu ändern und zu verwenden. Lesen Sie die Dokumentation: UIApplication Reference

    // main.m int main (int argc, char * argv []) {

    NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init]; 
    // Start an iPhone/iPad App using a .xib file (Defaults set in .plist) 
    //int retVal = UIApplicationMain(argc, argv, nil, nil); 
    
    // Start the iPhone/iPad App programmatically 
    // Set the 3rd argument to nil, to use the default UIApplication 
    // Set the 4th argument to the string name of your AppDelegate class 
    int retVal = UIApplicationMain(argc, argv, nil, @"AppDelegate_iPhone"); 
    
    [pool release]; 
    return retVal; 
    

    }

  5. Aktualisieren Sie Ihre Anwendung delegieren Code.

    // AppDelegate_iPhone.m - (BOOL) Anwendung: (UIApplication *) Anwendung didFinishLaunchingWithOptions: (NSDictionary *) launchOptions {

    // Override point for customization after application launch. 
        NSLog(@"Launch my application iphone"); 
    
        // Create the window, it's not created without a nib 
        window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; 
    
        // Create a subview that is red 
        UIView *myView = [[UIView alloc] initWithFrame:[window bounds]]; 
        [myView setBackgroundColor:[UIColor redColor]]; 
    
        // Add the subview and release the memory, sicne the window owns it now 
        [self.window addSubview:myView]; 
        [myView release]; 
    
        [self.window makeKeyAndVisible]; 
    
        return YES; 
    } 
    
+0

+1 Schönes Detail. –

+0

Dies ist eine großartige Antwort und umreißt die Schritte, die ich gemacht habe, aber im Detail.Es stellte sich heraus, dass ich zweimal UIWindow initialisiert habe (siehe oben). Jetzt funktioniert alles. Danke für deine ausgezeichnete Antwort. – andrewz

+0

Gern geschehen, ich fand es frustrierend, als ich anfing, da es eine Reihe von Schritten und Orten gibt, um Projekteinstellungen/Code zu bearbeiten. Ich bin nicht sicher, warum, aber an meinem Ende ist der Code nicht korrekt formatiert, obwohl ich versucht habe, es als Code zu markieren. –

1

Ich habe versucht, Ihren Code auszuführen, und es hat für mich funktioniert. Ich bekam eine leere Ansicht, die rot gefärbt war. Haben Sie versucht, Haltepunkte hinzuzufügen und zu überprüfen, ob Ihr Code tatsächlich ausgeführt wird? Ansonsten kann ich nur auf etwas mit Ihrem UIWindow kommen.

+0

ich herausgefunden, was das Problem war, initialisiert ich das Fenster falsch, ich habe eine doppelte init gemacht, so: [[[UIWindow alloc] init] initWithFrame: bounds]. Sobald ich die erste Init entfernt hatte, funktionierte es. Ich verbrachte über 6 Stunden mit diesem LOL. Vielen Dank! – andrewz

+0

manchmal muss man die Tastatur nur für eine Weile verlassen und später wiederkommen. Freut mich zu hören, dass du es gelöst hast. – ehenrik