2011-08-10 10 views
10

Así que estaba intentando probar una aplicación PhoneGap en la que he estado trabajando, y tuve algunos problemas con la prueba en mi iPad. Tengo el siguiente como el método main para esta aplicación:Prueba de iPad de la aplicación PhoneGap - problemas en el método principal

// 
// main.m 
// elog 
// 
// Created by Ben Potter on 9/08/11. 
// Copyright Arden Anglican School 2011. All rights reserved. 
// 

#import <UIKit/UIKit.h> 

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

    NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init]; 
    int retVal = UIApplicationMain(argc, argv, nil, @"AppDelegate"); 
    [pool release]; 
    return retVal; 
} 

Todo funciona bien hasta que se cierre la aplicación completamente y luego lo vuelve a abrir, sobre la cual se congela. Y no tengo idea de por qué.

Me postulo IOS5 en mi ipad con XCode 4.2

Por último, estos son los errores que surgen, gracias por la ayuda!

Main method errors Direct link here

+0

XCode 4.2 e iOS 5 están todavía bajo NDA. Sus mensajes de error están hablando volúmenes por cierto. Consulte aquí - http://stackoverflow.com/questions/6655842/nsautoreleasepool-is-unavailable. – Perception

Respuesta

19

la aplicación está utilizando Saldo de referencias automática (que es nuevo) y Phonegap no admite todavía. Vaya a la configuración de compilación de su proyecto y desactive el conteo automático de referencias.

+2

¿dónde puedo encontrar la configuración de compilación? –

+0

No puedo decir mucho más, ya que esto es bajo NDA. Sin embargo, si selecciona su proyecto principal en el panel izquierdo y luego selecciona la pestaña de configuración de construcción, debe encontrar lo que desea. – dtuckernet

+0

Aún decía que tenía problemas, así que terminé revertiendo mi iPad a 4.3 –

9

Así es como he resuelto el error "NSAutoReleasePool" en XCode 4.3 y con PhoneGap 1.5.

  1. Vaya a "YourApplicationName" en el Project Navigator.

  2. Seleccione "YourApplicationName" en Proyecto.

  3. Ir a Configuraciones de compilación.

  4. Asegúrese de activar "Todo" y "Combinado".

  5. Encuentra la sección "Apple LLVM compiler 3.1 - Language".

  6. Desplácese hacia abajo y encontrará "Recuento de referencia automático Objective-C".

  7. cambiarlo de Sí a No.

tratar de construir de nuevo el proyecto y que debe estar bien!

+0

¡Impresionante! Siempre cambié de Apple LLVM a LLVM GCC, pero esto solo rectificó parcialmente el problema. Su consejo lo resolvió de una vez por todas, y no puedo utilizar Apple LLVM. Gracias. – Jack

0

Si no desea deshabilitar ARC, a continuación, se corregirán los errores en Xcode 4.2.

AppDelegate.m

// self.window = [[[UIWindow alloc] initWithFrame:screenBounds]autorelease]; 
     self.window = [[UIWindow alloc] initWithFrame:screenBounds]; 

    // self.viewController = [[[MainViewController alloc] init] autorelease]; 
     self.viewController = [[MainViewController alloc] init]; 

(void) dealloc 
{ 
    // [super dealloc]; 
} 

main.m

int main(int argc, char *argv[]) { 
// NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init]; 
// int retVal = UIApplicationMain(argc, argv, nil, @"AppDelegate"); 
// [pool release]; 
// return retVal; 
    @autoreleasepool { 
    NSLog (@"Programming is fun!"); 
    } 
    return 0;  
} 

responsabilidad:

No estoy seguro de cómo esto afecta al resto de la PhoneGap lib un plugins aunque . Sin embargo, después de implementar estos cambios, la plantilla del proyecto PhoneGap se ejecuta en el simulador, pero finaliza al instante. Este fue solo un punto de partida.

mejor alternativa:

le sugiero que desactivar recuento de referencia Automático (ARC) en configuración de generación hasta PhoneGap lo soporta. Este hilo en el foro de PhoneGap insinúa que ARC may be supported in PhoneGap 1.6.

1

Por lo tanto, para aclarar las cuestiones visuales, tardé unos minutos en encontrar la opción correcta, ya que solo se menciona en los comentarios de otra respuesta. Tenía que encontrar el indicador de compilación CLANG_ENABLE_OBJC_ARC y cambiarlo a NO. Lo encontrará en la configuración de construir en la sección definida por el usuario (muy inferiores para mí):

enter image description here

que también fue capaz de conseguir más allá del error de ejecución por entrar en main.m y comentando la NSAutoreleasePool código de instalación como lo siguiente:

//NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init]; 
int retVal = UIApplicationMain(argc, argv, nil, @"AppDelegate"); 
//[pool release]; 
return retVal; 

Sin embargo, no estoy seguro de qué otros efectos podrían haber ocurrido más adelante. Parece que en este momento, mientras trabaja con PhoneGap, probablemente sea mejor seguir con el recuento de ref manual hasta que PhoneGap soporte adecuadamente ARC.

Y solo para Google, el error que me llevó aquí fue "NSAutorelease no está disponible" ya que no veo eso como texto en la publicación original.

0

Antes de Cordova 2.1.0 ARC no es compatible, se supone que no marque la casilla de abajo (cuando todavía se está creando el proyecto): enter image description here

Sin embargo, este es el código exacto que necesita:

#import <UIKit/UIKit.h> 

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

@autoreleasepool { 
    int retVal = UIApplicationMain(argc, argv, nil, @"AppDelegate"); 
    return retVal; 
    } 
} 

Si actualiza a 2.1.0 Cordova en Xcode 4.5.1 se puede ir a: Editar Refactor El objetivo de elegir entre ARC y la sintaxis de Objective-C moderna. enter image description here

Cuestiones relacionadas