嗯,我有一個應用程序,我正在iPhone SDK 2.2中開發,最近我在3.0模擬器中構建並啓動了它。基本SDK仍然設置爲2.2。我想這會避免問題。相反,我得到EXC_BAD_ACCESS當將iPhone應用程序從2.2移動到3.0模擬器
Exception Type: EXC_BAD_ACCESS (SIGSEGV)
Exception Codes: KERN_INVALID_ADDRESS at 0x00000000a1b1c1f3
Crashed Thread: 0
Thread 0 Crashed:
0 libobjc.A.dylib 0x92f4b688 objc_msgSend + 24
1 Foundation 0x305085bd -[NSCFString isEqualToString:] + 61
2 HappyApp 0x00002c27 -[CombinationsTableViewController loadData] + 220 (CombinationsTableViewController.m:64)
的崩潰是一個非常簡單的線條出現,其中total
是UITextField
if (![total.text isEqualToString:@""]) {
有沒有人遇到過嗎?我覺得這是一個線程爭用問題,或者我的整個應用程序沒有正確編譯。它適用於2.2.1模擬器。如果這不是在OS 3.0中測試2.2應用程序的方式,那麼除了切換下拉框之外,我該怎麼做?
更新:安德魯Pouliot是正確的,這是一個發佈的參考問題。調試器指向一行,所以我得到了錯誤的提示。罪魁禍首竟是這個第一行:
if(!([total.text isEqual:totalTextCache]
&& [divisions.text isEqual:divisionsTextCache])) {
//Loads the data for the table only if the values were actually changed
totalTextCache = total.text; //ditto for divisions
}
這些生產線的totalTextCache
的唯一用途,如果total.text
改變它變得無效。 這從來沒有在2.2.1 sim中引起過問題,這可能是因爲舊的total.text
在更改值時從未由運行時釋放。但是這個代碼是錯誤的。我固定它通過改變它做的正是我的isEqual以爲在做:
if(!(total.text==totalTextCache && divisions.text==divisionsTextCache))
因爲我其實沒有想複製NSString
S,而只是檢查他們是否有改變(因此將參考這個工作原理在2.2.1運行環境中,錯誤的代碼運行良好,因爲舊的引用仍然可以檢查它的散列屬性並通過isEqual
進行比較。
我正在建設3.0。我沒有爲2.2.1編譯錯誤。我從來沒有發佈TextField這是一個IBOutlet,它是我唯一的觀點的一部分。另一個字符串是文字。調試器可能會在我的代碼中指出一點,看過幾次。 還要回到2.0工具,請轉到項目>編輯項目設置,在常規選項卡中將所有配置的基本SDK設置爲2.x SDK。 – dlamblin 2009-06-19 09:26:42