应用程序仅在iPhone设备上崩溃而不在模拟器中崩溃

时间:2011-12-08 07:17:30

标签: iphone objective-c ios xcode

在我的应用程序中,当我按下按钮时,调用该按钮的方法首先将我的文本域文本直接分配给NSArray对象,如:

 val = [[NSArray alloc] initWithObjects: nameText.text, cellText.text, p_emText.text, 
                                      p_cnfrmText.text, s_emText.text, s_cnfrmText.text,
                                      emailText.text, ecnfrmText.text, lat, longt,  
                                      nil];

当我在模拟器上运行我的应用程序时,没有发生应用程序崩溃,但是当我在我的iPhone设备上运行它时,它会给出:Thread 1: program recieved signal "EXC_BAC_ACCESS"

有人能说出为什么会发生这种情况吗?这种情况的解决方案是什么?

5 个答案:

答案 0 :(得分:2)

在XCode中,转到菜单“编辑方案”,选择正在运行的配置并添加'NSZombieEnabled',如下图所示,当您的应用程序崩溃时,它将为您提供有助于您调试崩溃的其他信息。

enter image description here

修改

请注意,当您的应用程序调试结束时,请删除NSZombieEnabled命令,因为它会影响应用程序性能

答案 1 :(得分:1)

使用initWithObjects创建数组所涉及的所有对象都应该是实际对象。您的问题中没有足够的代码可以知道latlongt是否也是对象。是吗?

如果不是,请用[NSNumber numberWithFloa:<# the float #>]包装它们。

如果这不是问题,请检查有关EXC_BAC_ACCESS的SO问题以学习调试它们。

答案 2 :(得分:0)

从模拟器中删除应用程序/从Mac删除构建文件/从XCode清除产品,然后再在模拟器中运行它。检查它现在是否在模拟器中崩溃。

请看一下这个链接:EXC_BAD_ACCESS signal received。另外,在将它们放入数组之前,先取出所有textfield.texts的NSLog。可能是其中之一已成为零。

答案 3 :(得分:0)

可能是内存管理网的一个例子......你在使用后发布了所有对象吗?

模拟器具有整个机器的存储空间......但iphone具有针对单个应用程序的沙箱的已定义内存。

答案 4 :(得分:0)

很可能你的应用程序由于内存问题而崩溃,因为它没有在模拟器中崩溃,尝试释放你在完成它们时分配的所有对象。

如果您拥有自定义对象,并将其分配并初始化为;

MyCustomClass * myObject = [[MyCustomClass alloc] init];

您需要将其作为

发布

[myObject release];

特别是如果他们有成员分配大尺寸图像或其他类型的数据。

如果您的应用在开始解决这些内存管理问题后开始崩溃,则表明您的方法正确。所以继续发布。