Xcode sans Storyboard et ARC


116

J'ai téléchargé le nouveau xcode-5 et je viens de commencer à l'utiliser.

Nous pouvons créer une application directement comprenant le storyboard et l'ARC, cela ne demande pas d'option comme les versions antérieures.

Donc, ma question est de savoir comment utiliser xcode5 sans ARC et storyboard. nous devons supprimer manuellement le fichier de storyboard? ou y a-t-il une autre option.


3
Personne ne peut vraiment répondre à cela, mais je pense qu'Apple l'a fait parce que les storyboards et ARC sont l'avenir dans le développement d'applications avec Xcode ou en Objective-C. Étant donné que Xcode 5 est toujours une version bêta, il se peut qu'ils ajoutent une prise en charge plus tard cette année, mais je pense que cela n'arrivera pas.
HAS le

6
Supprimez le fichier de storyboard manuellement et supprimez l' -fobjc-arcindicateur du compilateur dans les paramètres du projet.

19
Les questions sur les outils principalement utilisés par les programmeurs sont très sur le sujet , à condition qu'ils ne demandent pas le «meilleur» de quelque chose ou des recommandations de «shopping». J'ai rouvert ceci en conséquence.
Tim Post

1
Mais ce n'est pas le bon endroit pour le faire. Comprenez cela.
MZimmerman6

3
la seule chose qui rend cela sous NDA est la partie "Xcode 5". tout ce qui est réellement décrit peut être fait sur les versions précédentes de Xcode donc techniquement ce sujet est libre de discuter.
AtomRiot

Réponses:


150

Créez un projet avec une application vide et ajoutez n'importe quel contrôleur de vue (j'ai ajouté TestViewController ici)

   - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions: (NSDictionary *)launchOptions
 {
   self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
   // Override point for customization after application launch.
   TestViewController *test = [[TestViewController alloc]     initWithNibName:@"TestViewController" bundle:nil];
   UINavigationController *nav = [[UINavigationController alloc]  initWithRootViewController:test];
   self.window.rootViewController = nav;
   [self.window makeKeyAndVisible];
   return YES;
 }

ÉTAPES POUR SUPPRIMER L'ARC

1) Dans les paramètres de construction, réglez le comptage de référence automatique sur NON .

//////////////////////////////////////////////////// /////////////////////////FIN//////////////////////// //////////////////////////////////////////////////// //////////////////////////////////////////////////// //////////////////////////////////////////////////// //////////////////////////////////////////////////// /////////////////////////

Si vous avez déjà créé une application avec storyboard et ARC, alors

ÉTAPES POUR SUPPRIMER LE TABLEAU D'HISTOIRE

1) Supprimez le fichier Main.storyboard de votre projet.

2) Ajoutez de nouveaux fichiers avec xib pour votre contrôleur, s'il n'est pas ajouté dans les sources compilées lors des phases de construction, ajoutez-les manuellement.

3) Supprimez le nom de base du fichier principal du storyboard de plist .

4) Modifiez le fichier appdelegate didFinishLaunchingWithOptions et ajoutez:

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

[self.window makeKeyAndVisible];

juste comme :

  - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
 {
    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]] ;

     // Override point for customization after application launch.

     TestViewController *test = [[TestViewController alloc]     initWithNibName:@"TestViewController" bundle:nil];
     UINavigationController *nav = [[UINavigationController alloc]  initWithRootViewController:test];
     self.window.rootViewController = nav;
     [self.window makeKeyAndVisible];

     return YES;
}


Maintenant, dans l'exemple ci-dessus, vous devez gérer la gestion de la mémoire manuellement comme,

 self.window = [[[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]] autorelease]; 

 [test release]; 

ÉTAPES POUR SUPPRIMER L'ARC

1) Dans les paramètres de construction, réglez le comptage de référence automatique sur NON .


7
N'y a-t-il plus une option "projet vide"? Je ne pense pas que je commencerai à utiliser des storyboards.
Sulthan

1
Assurez-vous de changer le paramètre «Interface principale» de votre cible sur votre nouveau <View Controller> racine.
Paul Brady

vous avez raison @Sulthan, nous pouvons le faire par un projet vide, mais ce sont les changements si j'ai déjà créé une application basée sur la vue. (nous devons supprimer manuellement du code de storyboard du fichier appDelegate) tandis que dans une application vide, nous devons y ajouter un nouveau code :)
PJR

Je suis tombé sur un script qui ajoutera l'option de supprimer les storyboards: stackoverflow.com/a/19792955/329928
Chris Leyva

pourquoi UINavigationController * nav n'est-il pas automatiquement publié? et nous devrions utiliser _window dans [UIWindow alloc]?
hariszaman

44

Au lieu de supprimer le fichier de storyboard, vous pouvez créer un nouveau projet avec un modèle d'application vide. Afin que vous puissiez éviter la création de fichiers de storyboard.

Utilisez les étapes suivantes pour omettre le storyboard: entrez la description de l'image ici

  1. Créez un nouveau projet avec un modèle d'application vide.
  2. Ajouter un nouveau viewController (Exemple: LoginViewController)
  3. Modifiez le didFinishLaunchingWithOptionsdans le AppDelegate.mfichier comme indiqué ci - dessous.

Changer pour:

#import "LoginViewController.h"

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];

    // Override point for customization after application launch.
    self.window.backgroundColor = [UIColor whiteColor];

    LoginViewController *loginVC = [[LoginViewController alloc] initWithNibName:@"LoginViewController" bundle:nil];
    UINavigationController *navigationController = [[UINavigationController alloc]  initWithRootViewController:loginVC];

    self.window.rootViewController = navigationController;
    [self.window makeKeyAndVisible];

    return YES;
}

Supprimer ARC: Allez dans Paramètres de construction -> Comptage automatique des références Objective-C -> NON


1
Hou la la! Fonctionne comme un charme et beaucoup plus simple que la réponse acceptée. Je devais juste m'assurer de changer toutes les références pour LoginViewControllerqu'elles correspondent au nom de mon propre contrôleur.
JohnK

11

créer un nouveau projet

! [Créer un nouveau projet]

supprimer le nom de base du fichier de storyboard principal dans Info

// supprimer le nom de base du fichier de storyboard principal dans Info

Ajouter ce code dans appdelegate

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];

    // Override point for customization after application launch.
    self.window.backgroundColor = [UIColor whiteColor];

    LoginViewController *loginVC = [[LoginViewController alloc] initWithNibName:@"LoginViewController" bundle:nil];
    UINavigationController *navigationController = [[UINavigationController alloc]  initWithRootViewController:loginVC];

    self.window.rootViewController = navigationController;
    [self.window makeKeyAndVisible];

    return YES;
}

Ensuite, supprimez automatiquement votre storyboard.

Veuillez essayer ceci ... Exécuté avec succès. Merci


5

ShortCut: je préfère

Créez le projet sans Storyboard et ARC dans xcode4, puis ouvrez ce projet dans xcode5.


1
Garder une ancienne version de Xcode juste pour cela ne vaut pas la peine. Je préfère créer un nouveau projet, me débarrasser des éléments de Storyboard, ajouter l'instanciation UIWindow dans appDelegate et l'enregistrer en tant que projet de modèle pour plus tard.
kervich

3

Xcode 4 avait la case à cocher «Utiliser des storyboards» lorsque vous avez créé un nouveau projet. Il est possible de récupérer les anciens modèles d'application Xcode 4 (fichiers XML) et de les convertir en Xcode 5. De cette façon, vous récupérez les anciens modèles qui vous permettent de choisir si vous voulez des storyboards ou non.


J'ai écrit un script qui fait tout cela pour vous: https://github.com/jfahrenkrug/Xcode4templates


Après avoir exécuté le script, vous aurez une section "Xcode 4" dans l'écran "Nouveau projet":

entrez la description de l'image ici

Et puis - Hélas! - vous récupérez vos choix préférés:

entrez la description de l'image ici

Vous aurez besoin d'une copie du bundle Xcode 4 .app de http://developer.apple.com/ios pour utiliser ce script.


1
Cependant, ces modèles sont anciens et ne tirent pas parti de toutes les nouvelles modifications disponibles, telles que -registerClass: forCellReuseIdentifier :.
mahboudz

@mahboudz C'est vrai. Vous devez modifier cela si cette fonctionnalité est importante pour vous. Bien sûr, j'espère qu'Apple ramènera l'option de désactiver les Storyboards dans une prochaine version de Xcode.
Johannes Fahrenkrug

1
J'espere. Comme vous, j'utilise Storyboard dans des applications plus petites, principalement en raison du développement rapide de TableView, mais dans les applications plus grandes, Storyboard est un problème majeur. Du défilement, à la mémorisation des identifiants de segue (ils doivent ajouter un moyen d'utiliser #defines ou const NSString * entre les storyboards et les fichiers source), à ​​la résolution de conflits git, et plus encore, les storyboards ne sont tout simplement pas la solution. terminer tout.
mahboudz

ces flèches V / A cependant.
John Riselvato

1
@JohnRiselvato Vous avez raison :) Les flèches odieuses sont parties maintenant :)
Johannes Fahrenkrug

0

J'ai un conseil:

  1. Le premier: je crée mon projet par XCode 4.6 (car cette version est la plus proche de XCode 5).
    • Bien sûr qu'avec XCode 4.6, vous pouvez choisir d'utiliser ou non ARC, Storyboard.
  2. Le deuxième: Après cela, j'ouvrirai mon projet avec XCode 5. => Je pense que Xcode 5 comprendra que le projet utilise nonARC, et bien sûr, je n'ai pas de Storyboard.

J'espère que votre projet fonctionnera! :RÉ

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.