2010-07-31 28 views
8

我一直在使用agvtool作爲我的iPhone應用程序的一般原則,並且最近發現了一個原因,我希望能夠檢查版本變量(以便我可以將幫助內容重新複製到Documents目錄中,如果它已過時)。在構建期間自動生成在MyApp_vers.c中定義的變量MyAppVersionNumber。它在.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 

那麼,我需要做什麼不同,以獲得此鏈接?

我對$ non_lazy_ptr和agvtool進行了搜索,沒有任何結果,只有$ non_lazy_ptr,它提供了一些東西,但主要是應用於庫,這不是真的(是嗎?)。到目前爲止,在我的挖掘中,我還沒有找到關於agvtool的一個頁面,它實際上就使用變量進行了詳細討論 - 我讀過的那些只是隨便說聲明一個外部變量,我已經完成了。

任何人都知道這一點,和/或以其他方式能夠提供任何幫助?

謝謝!

+0

嗯......一直做更多的谷歌搜索,並嘗試不同的東西,我發現這一點: 如果我把extern語句和參考都放到'main.m'中,它可以正常工作。然而,在我的視圖控制器類中使用它,卻無法工作......是否有一個extern變量可以通過一個類訪問(如@interface和@ @ @ @ @所定義的)? 我試着把它放在'@interface'裏面,它在'extern''之前出錯了:expected specifier-qualifier-list,在我的'.h'和'.m'的其他地方$ non_lazy_ptr鏈接錯誤)。 如何通過我的課程獲得訪問權限? – lindes 2010-07-31 03:55:03

+0

注意:我找到了解決原始問題的方法(涉及確保我的幫助查看器查看最新內容):不要將其複製到文檔(它是隻讀的,因此不是必需的)。 儘管如此,我還是很高興知道發生了什麼,以防因爲其他原因想要這個變量。 – lindes 2010-07-31 06:00:40

+0

對不起,我不明白你的問題,刪除了答案。 – 2011-02-15 05:05:36

回答

1

由於agvtool更新您的plist的CFBundleVersion價值,我建議與訪問在運行時的版本號:

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