Xcode sin Storyboard y ARC

116

He descargado el nuevo xcode-5 y recién comencé a usarlo.

Podemos crear aplicaciones directamente incluyendo storyboard y ARC, no está pidiendo opciones como versiones anteriores.

Entonces, mi pregunta es cómo podemos usar xcode5 sin ARC y storyboard. tenemos que eliminar manualmente el archivo del guión gráfico? o hay alguna otra opción.

PJR
fuente
3
Nadie puede realmente responder a esto, pero creo que Apple lo hizo porque tanto Storyboards como ARC son el futuro en el desarrollo de aplicaciones con Xcode o en Objective-C. Dado que Xcode 5 todavía es una versión beta, podría ser que agreguen soporte para él más adelante este año, pero creo que eso no sucederá.
TIENE el
6
Elimine el archivo del guión gráfico manualmente y elimine la -fobjc-arcmarca del compilador en la configuración del proyecto.
19
Las preguntas sobre las herramientas utilizadas principalmente por los programadores están muy relacionadas con el tema , siempre que no pidan lo "mejor" de algo o recomendaciones de "compras". He vuelto a abrir esto en consecuencia.
Tim Post
1
Pero este no es el lugar adecuado para hacerlo. Entiende eso.
MZimmerman6
3
lo único que hace esto bajo NDA es la parte de las palabras "Xcode 5". cualquier cosa que se describa realmente se puede hacer en versiones anteriores de Xcode, por lo que técnicamente este tema es libre de discutir.
AtomRiot

Respuestas:

150

Cree un proyecto con una aplicación vacía y agregue cualquier controlador de vista (agregué TestViewController aquí)

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

PASOS PARA RETIRAR EL ARCO

1) En la configuración de construcción, configure el recuento automático de referencias en NO .

//////////////////////////////////////////////////// /////////////////////////FINAL//////////////////////// //////////////////////////////////////////////////// //////////////////////////////////////////////////// //////////////////////////////////////////////////// //////////////////////////////////////////////////// ///////////////////////

Si ya ha creado una aplicación con guión gráfico y ARC entonces

PASOS PARA RETIRAR EL TABLERO DE HISTORIA

1) Elimine el archivo Main.storyboard de su proyecto.

2) Agregue nuevos archivos con xib para su controlador, si no se agrega en las fuentes compiladas en las fases de compilación, agréguelo manualmente.

3) Elimine el nombre base del archivo del guión gráfico principal de plist .

4) Cambie el archivo appdelegate didFinishLaunchingWithOptions y agregue:

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

[self.window makeKeyAndVisible];

al igual que :

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


Ahora, en el ejemplo anterior, debe administrar la administración de la memoria manualmente como,

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

 [test release]; 

PASOS PARA RETIRAR EL ARCO

1) En la configuración de construcción, establezca el recuento automático de referencias en NO .

PJR
fuente
7
¿Ya no hay una opción de "proyecto vacío"? No creo que empiece a usar guiones gráficos.
Sulthan
1
Asegúrese de cambiar la configuración de la "Interfaz principal" de su Target a su nueva raíz <Controlador de vista>.
Paul Brady
tienes razón @Sulthan podemos hacerlo por proyecto vacío, pero estos son los cambios si ya he creado una aplicación basada en la vista. (tenemos que eliminar algún código del guión gráfico manualmente del archivo appDelegate) mientras que en la aplicación vacía tenemos que agregar un nuevo código :)
PJR
Me encontré con un guión que agregará la opción para eliminar los guiones gráficos: stackoverflow.com/a/19792955/329928
Chris Leyva
¿Por qué no se libera automáticamente UINavigationController * nav? y deberíamos usar _window en [UIWindow alloc]?
hariszaman
44

En lugar de eliminar el archivo del guión gráfico, puede crear un nuevo proyecto con la plantilla de aplicación vacía. Para que pueda evitar la creación del archivo del guión gráfico.

Utilice los siguientes pasos para omitir el guión gráfico: ingrese la descripción de la imagen aquí

  1. Cree un nuevo proyecto con la plantilla Aplicación vacía.
  2. Agregue un nuevo viewController (ejemplo: LoginViewController )
  3. Cambie el archivo didFinishLaunchingWithOptionsen AppDelegate.mcomo se especifica a continuación.

Cambiar a:

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

Eliminar ARC: vaya a Configuración de compilación -> Conteo automático de referencias de Objective-C -> NO

Raj Subbiah
fuente
1
¡Guauu! Funciona de maravilla y mucho más simple que la respuesta aceptada. Solo tenía que asegurarme de cambiar todas las referencias para LoginViewControllerque coincidan con el nombre de mi propio controlador.
JohnK
11

crear nuevo proyecto

![Crear nuevo proyecto]

eliminar el nombre base del archivo del guión gráfico principal en Información

// eliminar el nombre base del archivo del guión gráfico principal en Información

Agregar este código en 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;
}

Luego, elimine automáticamente su guión gráfico.

Intente esto ... Ejecutado correctamente. Gracias

Ketan Patel
fuente
5

Atajo: Prefiero

Cree el proyecto sin Storyboard y ARC en xcode4 y luego abra ese proyecto en xcode5.

SwapnilPopat
fuente
1
Mantener una versión anterior de Xcode solo por eso no vale la pena. Prefiero crear un nuevo proyecto, deshacerme de las cosas del Storyboard, agregar la instanciación de UIWindow en appDelegate y guardarlo como un proyecto de plantilla para más adelante.
kervich
3

Xcode 4 tenía la casilla de verificación "Usar guiones gráficos" cuando creaba un nuevo proyecto. Es posible tomar las viejas plantillas de la aplicación Xcode 4 (archivos XML) y convertirlas a Xcode 5. De esa manera, recuperas las viejas plantillas que te permiten elegir si quieres guiones gráficos o no.


Escribí un script que hace todo ese trabajo por ti: https://github.com/jfahrenkrug/Xcode4templates


Después de ejecutar el script, tendrá una sección "Xcode 4" en la pantalla "Nuevo proyecto":

ingrese la descripción de la imagen aquí

Y luego ... ¡Ay! - recuperas tus amadas elecciones:

ingrese la descripción de la imagen aquí

Necesitará una copia del paquete Xcode 4 .app de http://developer.apple.com/ios para usar este script.

Johannes Fahrenkrug
fuente
1
Sin embargo, esas plantillas son antiguas y no aprovechan todos los nuevos cambios disponibles, como -registerClass: forCellReuseIdentifier :.
mahboudz
@mahboudz Eso es cierto. Necesita modificar eso si esa funcionalidad es importante para usted. Por supuesto, espero que Apple recupere la opción de no participar en Storyboards en una versión futura de Xcode.
Johannes Fahrenkrug
1
Yo espero que sí. Como tú, uso Storyboard en aplicaciones más pequeñas, principalmente debido al rápido desarrollo de TableView, pero en aplicaciones más grandes, Storyboard es un gran problema. Desde desplazarse, recordar ID de segue (tienen que agregar una forma de utilizar #defines o const NSString * entre Storyboards y archivos fuente), resolver conflictos de git, y más, los Storyboards simplemente no son todo y acabar todo.
mahboudz
aunque esas flechas V / A.
John Riselvato
1
@JohnRiselvato Tienes razón :) Las flechas desagradables se han ido ahora :)
Johannes Fahrenkrug
0

Tengo un consejo:

  1. El primero: creo mi proyecto con XCode 4.6 (porque esta versión es la más cercana a XCode 5).
    • Por supuesto que con XCode 4.6, puede elegir usar o no usar ARC, Storyboard.
  2. El segundo: Después de eso, abriré mi proyecto con XCode 5. => Creo que Xcode 5 entenderá que el proyecto no usa ARC y, por supuesto, no tiene Storyboard.

¡Espero que su proyecto funcione! :RE

Linh Nguyen
fuente