【问题标题】:Loading NSMutableArray in UITableViewController with Search bar crashing - iOS5 with ARC在 UITableViewController 中加载 NSMutableArray 并导致搜索栏崩溃 - 带有 ARC 的 iOS5
【发布时间】:2012-02-18 17:11:32
【问题描述】:

我在 iOS 5 中将NSMutableArray 加载到带有搜索栏的UITableViewController 中。如果我按照下面的代码填充数组并单击搜索栏,它会完美运行:

[placesOutputArray addObject:@"object1"];
[placesOutputArray addObject:@"object2"];
[placesOutputArray addObject:@"object3"];
[placesOutputArray addObject:@"object4"];

customSearchArray 是在UITableView 委托方法中加载的数据数组。

但是,如果我按照下一种方式填充数组并单击搜索栏:

for(int i=0;i<15;i++)
   [placesOutputArray addObject:@"TestContent"];     

当我点击搜索栏时它崩溃了:

* 由于未捕获的异常“NSRangeException”而终止应用程序,原因:“* -[__NSArrayM objectAtIndex:]:空数组的索引 9 超出范围” * 首先抛出调用栈: (0x33d9a8bf 0x33fea1e5 0x33ce3b6b 0xa1d1 0x371a39cb 0x371a2aa9 0x3718977b 0x371896c3 0x37189277 0x37184e7b 0x37184bf9 0x37302b0f 0x33d95813 0x33d8e72f 0 P>

我看到问题出在 cellForRowAtIndexPath UITableView 委托方法上,因为第一个屏幕只显示 9 个单元格。有什么建议吗?

【问题讨论】:

    标签: iphone objective-c uitableview ios5 nsmutablearray


    【解决方案1】:

    解决了!这是与cellForRowAtIndexPath 和可变对象相关的问题。解决了检查UITableViewCells 并制作可变副本的问题。

    【讨论】:

      【解决方案2】:

      NSArray 的实例是不可变的。请改用NSMutableArray。说得更清楚些,将placesOutputArray从NSArray改成NSMutableArray,别忘了给它适当分配内存self.placesOutputArray = [NSMutableArray array];

      【讨论】:

      • 非常感谢您的回复尤金。我使用了 NSMutableArray 而不是 NSArray 并且我用 self.placesOutputArray = [NSMutableArray array]; 分配了 placesOutputArray但仍然崩溃。我正在使用带有自动引用计数的 ios5。还有其他建议吗?
      【解决方案3】:

      但是,如果我按照下一种方式填充数组并单击搜索 酒吧:

      我看不到您的代码如何填充同一个数组。您提供的 sn-p 看起来像初始化 placesOutputArray,而不是 customSearchArray。你觉得答案就这么简单吗?

      【讨论】:

      • 感谢大家的回复。抱歉,NSMutableArray 的填充超出了对象 placesOutputArray 而不是 customSearchArray,这是我的错。我正在参考填充数组的方式。我已将结果对象修改为 NSMutableArray 但仍然崩溃。如果我填充placesOutputArray 对字符串进行硬编码,那么一切都很完美,但是例如,如果我将它填充到for循环中,它就会崩溃。有什么建议吗?
      猜你喜欢
      • 2012-02-27
      • 1970-01-01
      • 2013-01-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多