【问题标题】:EXC_BAD_ACCESS when moving iPhone app from 2.2 to 3.0 simulator将 iPhone 应用程序从 2.2 移动到 3.0 模拟器时的 EXC_BAD_ACCESS
【发布时间】:2009-06-19 08:17:29
【问题描述】:

嗯,我有一个使用 iPhone SDK 2.2 开发的应用程序,我最近在 3.0 模拟器中构建并启动了它。基本 SDK 仍设置为 2.2。我认为这样可以避免问题。相反,我得到了

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)

崩溃发生在一个非常简单的行上,其中totalUITextField

if (![total.text isEqualToString:@""] ) {

有人遇到过吗?我觉得这是一个线程争用问题,或者我的整个应用程序没有正确编译。它适用于 2.2.1 模拟器。如果事实证明这不是在 OS 3.0 中测试 2.2 应用程序的方法,那么除了切换该下拉框之外我应该做什么?

更新:Andrew 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))

因为我实际上并不想复制 NSStrings,而只是检查它们是否已更改(因此引用会更改,这是可行的。错误的代码在 2.2.1 运行时运行良好,因为旧参考仍然可以通过 isEqual 检查和比较它的哈希属性。

【问题讨论】:

    标签: iphone iphone-sdk-3.0 ios-simulator


    【解决方案1】:

    当我安装我的 3.0 SDK 时,我的 2.0 工具消失了,所以不确定这是否适用,但我不认为模拟器构建旨在与未来的运行时兼容。

    问题很可能出在您的代码中。如果是这样,我可以说你有内存管理问题而不是“线程争用”。一切都发生在 UIKit 的主线程上(不是线程安全的)。

    检查您设置总变量的位置;当您使用此方法时,它可能已经发布。确保您的 retainCount 是合理的。

    你在为 3.0 构建时是否遇到同样的错误?

    【讨论】:

    • 我正在为 3.0 构建。我没有 2.2.1 的错误构建。我从不发布 TextField,它是一个 IBOutlet,它是我唯一视图的一部分。另一个字符串是文字。调试器可能会在我的代码中指出一点点,看过几次。此外,要恢复您的 2.0 工具,请转到 Project > Edit Project settings,在 General 选项卡中将 Base SDK for All Configurations 设置为 2.x SDK。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-04-08
    • 1970-01-01
    • 2011-10-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多