2012-09-24 43 views
2

此代碼片段來自iPad應用程序,當前位於應用程序商店中,並使用ARC編寫。該代碼使用xCode 4.4.1(4F1003)開發,並在IOS Simulator 5.1(272.21)中正常運行。我最近安裝了xCode 4.5和IOS Simulator 6.0,當sqlite3_open返回到我的目標C代碼時,我現在得到EXC_BAD_ACCESS(code = 2,address = 0x200)。xCode 4.5 sqlite3_open EXC_BAD_ACCESS in objc_storeStrong

sqlite3 *tempDatabase; 

const char *sqlStatement = [s_DBEngineDBName UTF8String]; 
commandReturn = sqlite3_open(sqlStatement, &tempDatabase); // open main db 
if(commandReturn == SQLITE_OK) { 
    // ... 
} 

我以前用過下面的命令來打開數據庫,但是它在新環境下也失敗了。

commandReturn = sqlite3_open([s_DBEngineDBName cStringUsingEncoding:NSStringEncodingConversionAllowLossy], &tempDatabase); // open main db 

正如我上面介紹的那樣,通過SQLite代碼,它將按預期工作,直到執行最終的return語句。我很困惑,爲什麼objc_storeStrong甚至涉及。

+1

'sqlStatement'的價值是什麼?什麼是完整的調用堆棧?什麼是'objc_storeString'的參數? –

+0

打開殭屍,看看它是否捕捉任何東西。 – bbum

回答

1

我把這個問題追蹤到包含文件中的前向聲明: @class sqlite3; 這顯然是錯誤的,因爲sqlite3是一個結構。這導致ARC嘗試引用計數它是什麼引發異常。

刪除行會導致編譯錯誤,這些錯誤通過在關鍵字「struct」前加sqlite3的前綴很容易解決。

感謝您的建議,因爲他們讓我深入挖掘並意識到編譯器正在考慮將sqlite3作爲一個類,但實際上並非如此。

+0

什麼是班級名稱? – nemesis