0

好的,所以我正在构建一个界面,以允许管理员控制使用 UISwitches 控制的某些规则(其中很多)

所以我声明了一个开关数组

NSMutableArray *cameraSwitches = [[NSMutableArray alloc] initWithObjects:
loc0CamProfileSwitch, loc1CamProfileSwitch, loc2CamProfileSwitch,
loc3CamProfileSwitch, loc4CamProfileSwitch, loc5CamProfileSwitch,
loc6CamProfileSwitch, loc7CamProfileSwitch, loc8CamProfileSwitch, nil]; 

其中 Array 中的每个对象都是一个 UISwitch,

然后我循环一个 diff 数组检查这些开关的初始值

for (NSUInteger i = 0; i < [camP count]; i++) {

    if ([camP objectAtIndex:i] != 0) {

        //UISwitch *csw = [cameraSwitches objectAtIndex:i];
        //[csw setOn:YES];

        [[cameraSwitches objectAtIndex:i] setOn:YES];
    else { [loc7CamProfileSwitch setOn:NO]; }
}

但是我正在尝试的一切都是在运行时给我一个错误,抛出一个异常 'NSRangeException', reason: '*** -[__NSArrayM objectAtIndex:]: index 0 beyond bounds for empty array'

使用断点:我意识到这条线有问题

[[cameraSwitches objectAtIndex:i] setOn:YES];- 或者我如何启动阵列,非常感谢任何帮助

4

2 回答 2

1

cameraSwitches 已正确实例化。这就是为什么当您尝试达到索引 0 时会引发异常。

但是,您是否检查过 loc0CamProfileSwitch(索引 0)不为零?

于 2012-10-09T15:24:53.890 回答
1

最有可能的cameraSwitches是在实例化后被释放。如果您使用与调用时不同的方法创建它objectAtIndex并且您没有将其设置为 iVar 或 @property(强),则可能会发生这种情况。

如果这不能解决问题,请设置断点并在调试控制台中[[cameraSwitches objectAtIndex:i] setOn:YES]键入。po cameraSwitches

于 2012-10-09T15:46:26.197 回答