0

わかりました。UISwitchを使用して制御される特定のルール(多くのルール)を管理者が制御できるようにするためのインターフェイスを構築しています。

だから私はスイッチの配列を宣言しました

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

ここで、配列内の各オブジェクトは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)が非nilであることを確認しましたか?

于 2012-10-09T15:24:53.890 に答える
1

ほとんどcameraSwitchesの場合、インスタンス化された後に割り当てが解除されます。これは、呼び出しているときとは異なる方法で作成しobjectAtIndex、iVarまたは@property(strong)として設定していない場合に発生する可能性があります。

それでも問題が解決しない場合は、ブレークポイントを設定してデバッグコンソールに[[cameraSwitches objectAtIndex:i] setOn:YES]入力します。po cameraSwitches

于 2012-10-09T15:46:26.197 に答える