从数组中加载选择器会导致EXC_BAD_ACCESS

时间:2011-11-23 22:32:09

标签: objective-c ios cocoa-touch memory-management

发现它! (6个小时后)。

我没有删除我的问题,而是将其留下,以防其他人遇到同样的问题。

问题:

如果我创建一个包含固定项目列表的数组

theArray = [[NSArray alloc] initWithObjects: @"One", @"Two", nil]; 

并在选择器的titleForRow例程中使用它(标准写法,唯一的区别是return语句):

return [theArray objectAtIndex: row];
拾取器填充并正常工作。

但是,如果我使用...填充theArray

theArray = [[NSArray arrayWithArray: [textString componentsSeparatedByString: @"||"]];

程序以BAD ACCESS消息炸弹。我已使用NSLog检查textString,并使用循环验证theArray是否包含与直接填充相同的数据(包括“nil”)但除非数组元素是硬连线的,否则无法使选择器接受theArray的行标题。

解决方案,添加“retain”一词:我取消了arrayWithArrays,然后选择了:

theArray = [[textString componentsSeparatedByString: @"||"] retain];

显然,你使用componentsSeparatedByString获得的数组是自动释放的,并且不能保持足够长的时间以便选择器被填充。我是游戏的新手,对内存问题知之甚少,所以我的解释可能不是100%。但该计划现在正在运作。

1 个答案:

答案 0 :(得分:0)

从Rob Smythe对问题的更新回答:

  

解决方案,添加单词retain:我取消了arrayWithArrays   然后去了:

theArray = [textString componentsSeparatedByString @"||"]retain];
     

显然,componentsSeparatedByString获得的数组是   自动释放,并且不会长时间留在挑选者身边   得到人口。我是游戏中的新手,并不是很了解   记忆问题,所以我的解释可能不是100%。但该计划是   现在正在工作。

相关问题