在我的应用程序中,当我按下按钮时,调用该按钮的方法首先将我的文本域文本直接分配给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"
有人能说出为什么会发生这种情况吗?这种情况的解决方案是什么?
答案 0 :(得分:2)
在XCode中,转到菜单“编辑方案”,选择正在运行的配置并添加'NSZombieEnabled',如下图所示,当您的应用程序崩溃时,它将为您提供有助于您调试崩溃的其他信息。
修改的
请注意,当您的应用程序调试结束时,请删除NSZombieEnabled命令,因为它会影响应用程序性能
答案 1 :(得分:1)
使用initWithObjects
创建数组所涉及的所有对象都应该是实际对象。您的问题中没有足够的代码可以知道lat
和longt
是否也是对象。是吗?
如果不是,请用[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];
特别是如果他们有成员分配大尺寸图像或其他类型的数据。
如果您的应用在开始解决这些内存管理问题后开始崩溃,则表明您的方法正确。所以继续发布。