Objective-C:UISwitches的NSArray

时间:2012-10-09 15:08:56

标签: objective-c nsarray uiswitch

好的,所以我;建立一个界面,允许管理员控制使用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]; - 或者我如何启动数组任何帮助都非常感谢

2 个答案:

答案 0 :(得分:1)

cameraSwitches被正确实例化。这就是为什么当你试图达到索引0时会引发异常的原因。

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

答案 1 :(得分:1)

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

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