2010-12-11 4 views
4

Lorsque j'exécute le code ci-dessous dans le simulateur je m'attends à voir rouge remplir l'écran, mais à la place tout est noir, pourquoi?uiview ne montre pas dans l'application délégué

- (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; 
} 

Si j'ajoute l'initialisation de la fenêtre, qui ne permet pas:

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

Mes ennuis après avoir créé commencé quand un projet universel à base de fenêtres dans Xcode j'ai décidé de supprimer l'iPad/iPhone xib Les fichiers et l'application iPhone/iPad permettent de déléguer des fichiers créés automatiquement dans le projet et d'avoir un seul délégué d'application avec un contrôleur de vue qui construit la vue par programme en fonction de l'appareil. Maintenant, je n'arrive pas à afficher une vue simple que je crée dans le délégué de l'application. Editer: J'ai supprimé l'ajout d'une vue et maintenant défini la couleur de fond de la fenêtre en rouge. Cela n'aide pas, mais si je vais au bureau dans le simulateur et que je rouvre l'application en cours d'exécution, je reçois maintenant un écran rouge. Encore une fois, je suis perplexe quant à pourquoi je ne vois pas le rouge la première fois que je lance l'application.

Répondre

8

Voici les étapes à suivre pour configurer un projet iOS Universel non-InterfaceBuilder (.xib).

  1. Supprimez toutes les associations aux fichiers .xib de votre liste de propriétés pour l'application. Delete the .xib file references from your application plist

  2. Supprimer tous les fichiers .xib du projet

  3. (Facultatif) Créez une classe Delegate d'application commune, puis supprimez le AppDelegate_iPad. * Et le AppDelegate_iPhone. * Fichiers. (Copiez coller n'importe quel code à partir des fichiers existants avant la suppression)
  4. Modifiez votre fichier main.m pour nommer le délégué de l'application. J'ai choisi de modifier et d'utiliser le AppDelegate_iPhone à des fins d'exemple. Consultez la documentation: 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. Mettez à jour votre code d'application délégué.

    // AppDelegate_iPhone.m - (BOOL) application: (*) UIApplication didFinishLaunchingWithOptions d'application: (*) 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 Beau détail. –

+0

Ceci est une excellente réponse et décrit les étapes que j'ai prises, mais de manière plus détaillée.Il s'avère que ma faute était dans l'initialisation d'UIWindow deux fois (voir ci-dessus). Maintenant tout fonctionne. Merci pour votre excellente réponse. – andrewz

+0

De rien, j'ai trouvé cela frustrant quand j'ai commencé car il y a un certain nombre d'étapes et d'endroits pour éditer les paramètres du projet/code. Je ne sais pas pourquoi, mais de mon côté le code n'est pas formaté correctement même si j'ai essayé de le marquer comme du code. –

1

J'ai essayé d'exécuter votre code et cela a fonctionné pour moi. J'ai eu une vue vide qui était colorée en rouge. Avez-vous essayé d'ajouter des points d'arrêt et de vérifier que votre code est effectivement exécuté? Sinon, la seule chose que je peux trouver est que c'est quelque chose avec votre UIWindow.

+0

Je cernées quel était le problème, j'initialisés la fenêtre incorrectement, j'ai fait un double init comme: [[[UIWindow alloc] init] initWithFrame: bounds]. Une fois que j'ai enlevé le premier init j'ai eu le travail. J'ai passé plus de 6 heures sur ce LOL. Merci! – andrewz

+0

Parfois, il suffit de quitter le clavier pendant un moment et de revenir plus tard. Heureux d'entendre que vous l'avez résolu. – ehenrik