2013-04-29 66 views
0

当我单击按钮时,UIAlertView提示用户输入名称。然后将该名称创建为新的“客户”对象并插入到可变数组中。向UIPickerView添加名称时应用程序崩溃

有一个单独的可变数组,名为'CustListByName',它存储所有名称的列表。

即时通讯的问题是,当添加第二个或第三个名称时,应用程序崩溃。有时会发生在第二次尝试上,其他时间会在第三次尝试中发生。除了(lldb)之外,调试器中没有提供任何信息。该程序报告EXC_BAD_ACCESS,然后它将我转移到一个包含大量汇编代码的屏幕上。

碰撞是发生在这些行的代码:

本质上,它清除名称的数组,然后它的对象阵列上重新填充基于。我已经逐步研究了一个断点,但是直到崩溃时,一切似乎都正确无误。这也令人困惑,为什么会发生在第二次或第三次尝试,而不是第一次。

[custListByName removeAllObjects]; 
    for (Customer *object in custListByObject) { 
     [custListByName addObject:object->name]; 
    } 

这里是一个客户创建并每次插入新的客户按钮被点击代码:

Customer *tempCust = [[Customer alloc] init]; 
    tempCust->name =[[alertView textFieldAtIndex:0] text]; 
    [custListByObject addObject:tempCust]; 
    [tempCust release]; 

我真的很感激这种帮助,谢谢!

+0

我可以假设你正在操作的NSMutableArray与用作UIPicker的数据源的数组是同一个数组吗? – csundman 2013-04-29 22:17:30

+0

而不是使tempCust->一个公共变量,创建一个类型副本的proprerty。 – 2013-04-29 22:17:43

+0

@darkfoxmrd - 是的,custListbyName是UIPicker的数据源。 – 2013-04-29 22:23:28

回答

0

我怀疑发生的事情是UIPickerView正在尝试使用您的客户阵列中的信息加载一行后,您已经清除它,并在重新填充它之前。这会导致访问错误。

你可能会考虑做什么,而是保留两个数组,一个用于加载客户的NSMutableArray和一个NSArray作为UIPickerView的实际数据源。然后,在重新加载UIPickerView之前,您会说:

dataSourceArray = [loadingArray copy]; 
[pickView reloadAllComponents]; 

希望这会有所帮助。

编辑:

这是你更新的代码是什么样子,如果你装阵被称为loadingCustListByName:

[loadingCustListByName removeAllObjects]; 
    for (Customer *object in custListByObject) { 
     [loadingCustListByName addObject:object->name]; 
    } 
custListByName = [loadingCustListByName copy]; 
[pickView reloadAllComponents]; 

这样做将确保UIPickerView的数据源阵列始终与行数相匹配它认为它已经。

相关问题