发现它! (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%。但该计划现在正在运作。
答案 0 :(得分:0)
从Rob Smythe对问题的更新回答:
解决方案,添加单词
retain
:我取消了arrayWithArrays
然后去了:theArray = [textString componentsSeparatedByString @"||"]retain];
显然,
componentsSeparatedByString
获得的数组是 自动释放,并且不会长时间留在挑选者身边 得到人口。我是游戏中的新手,并不是很了解 记忆问题,所以我的解释可能不是100%。但该计划是 现在正在工作。