2010-07-31 2 views
8

Я использовал agvtool для одного из моих iPhone-приложений по общему принципу и недавно нашел причину, по которой я хочу проверить версию (чтобы я мог повторно скопировать справочный контент в каталог «Документы», если он устарел). Переменная, MyAppVersionNumber, определенная в MyApp_vers.c, автоматически генерируется во время сборки. Он генерируется в файле .o и отображается в (предыдущей версии?) Самого связанного приложения. Казалось бы, так хорошо.

Так что теперь я объявил в .m файле, где мне нужно использовать это (и позже пытаться использовать его, только в NSLog заявлении для начала) в extern double MyAppVersionNumber, и я пытаюсь построить для iPhone симулятор, и получите сообщение об ошибке:

"_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 

Итак, что мне нужно сделать по-другому, чтобы связать это?

Я googled для $ non_lazy_ptr и agvtool, и ничего не получил, и всего за $ non_lazy_ptr, что дало некоторые вещи, но в основном применяется к библиотекам, чего это не так, действительно (это?). И в моих раскопах до сих пор я еще не добавил страницу об agvtool, которая фактически подробно обсуждает использование переменных - те, которые я прочитал, просто небрежно говорят, чтобы объявить внешнюю переменную, которую я сделал ,

Любой, кто знаком с этим и/или иным образом может оказать любую помощь?

Спасибо!

+0

Хммм ... делали более прибегая к помощи, и пробовать разные вещи, и я нашел это: Если я поставил оператор extern и ссылку как на 'main.m', он отлично работает. Использование его в моем классе контроллера контроллера, тем не менее, не работает ... Есть ли какая-то проблема с наличием внешней переменной, доступной через класс (как определено '@ interface' и' @ implementation')? Я пробовал поместить его в '@ interface', который терпит неудачу с« ошибкой: ожидаемым спецификатором-классификатором-списком до «extern''» и в разных других местах в моих '.h' и' .m' (снова Ошибка $ non_lazy_ptr). Как получить доступ через мой класс? – lindes

+0

Примечание. Я нашел способ решить мою оригинальную проблему (включая проверку того, что мой просмотрщик справки просматривает последний контент): Не копируйте его в Документы (это только для чтения, поэтому не требуется). Тем не менее, было бы хорошо знать, что происходит, если я когда-нибудь захочу эту переменную по другим причинам. – lindes

+0

Извините, я не мог понять вопрос ур, удалил ответ. –

ответ

1

Поскольку agvtool обновляет значение CFBundleVersion вашего Plist, я предлагаю получить доступ к номеру версии во время выполнения с:

NSDictionary *mainDictionary = [[NSBundle mainBundle] infoDictionary]; 
double myVersionNumber = [(NSString *)[infoDictionary objectForKey:@"CFBundleVersion"] doubleValue]; 
Смежные вопросы