2010-07-31 12 views
8

He estado usando agvtool para una de mis aplicaciones de iPhone por principio general, y recientemente encontré una razón por la que deseo poder verificar la variable de versión (para poder volver a copiar el contenido de la ayuda en el directorio de Documentos, si está desactualizado). La variable, MyAppVersionNumber, definida en MyApp_vers.c, se genera automáticamente durante la compilación. Se genera en un archivo .o y aparece en (¿la versión anterior?) De la aplicación vinculada. Hasta ahora todo bien, parece.

Así que ahora he declarado una extern double MyAppVersionNumber en el archivo .m donde tengo que usar esto (y tratar de usarlo, simplemente en una declaración NSLog para empezar más tarde), y trato de construir para el simulador de iPhone, y obtener un error de enlace:

"_MyAppVersionNumber", referenced from: 
     _MyAppVersionNumber$non_lazy_ptr in HelpViewController.o 
    (maybe you meant: _MyAppVersionNumber$non_lazy_ptr) 
ld: symbol(s) not found 
collect2: ld returned 1 exit status 

Entonces, ¿qué tengo que hacer de otra manera para que esto se enlace?

Busqué en Google $ non_lazy_ptr y agvtool, y no obtuve nada en absoluto, y por solo $ non_lazy_ptr, que dio algunas cosas, pero sobre todo se aplica a las bibliotecas, que esto no es realmente (¿verdad?). Y en mis excavaciones hasta el momento, todavía tengo que mostrar una página sobre agvtool que realmente habla con detalle sobre el uso de las variables, las que he leído dicen casualmente para declarar una variable externa, que he hecho .

¿Alguien familiarizado con esto y/o capaz de ayudarnos?

Gracias!

+0

Hmmm ... estado haciendo más googlear, y probar cosas diferentes, y me encontré con esto: Si pongo la instrucción extern y la referencia ambas en 'main.m', funciona bien. Sin embargo, usarlo en mi clase de controlador de vista no funciona ... ¿Hay algún problema con tener una variable externa accesible a través de una clase (como se define en '@ interface' y' @ implementation')? He intentado ponerlo en '@ interface', que falla con' error: specifier-calificador-list esperado antes 'extern'', y en varios otros lugares en mi '.h' y' .m' (otra vez $ non_lazy_ptr error de enlace). ¿Cómo obtengo acceso a través de mi clase? – lindes

+0

Nota: He encontrado una manera de resolver mi problema original (que implica asegurarse de que mi visor de Ayuda vea el contenido más reciente): No lo copie en Documentos (es de solo lectura, por lo que no es obligatorio). Aún así, sería bueno saber qué estaba pasando, en caso de que alguna vez quiera esta variable por otros motivos. – lindes

+0

Lo siento, no pude entender su pregunta, borré la respuesta. –

Respuesta

1

Desde agvtool actualiza el valor de su CFBundleVersion plist, sugiero acceso al número de versión en tiempo de ejecución con:

NSDictionary *mainDictionary = [[NSBundle mainBundle] infoDictionary]; 
double myVersionNumber = [(NSString *)[infoDictionary objectForKey:@"CFBundleVersion"] doubleValue]; 
Cuestiones relacionadas