0

2 つのオブジェクトでNSMutableArray呼び出されたの初期化に問題があります。次のエラーが表示されます。_entryArrayNSString@"00:00:00"

キャッチされていない例外 'NSRangeException' が原因でアプリを終了しています。理由: ' * -[__NSArrayM objectAtIndex:]: インデックス 1 が空の配列の境界を超えています'

オブジェクトなしで初期化しようとすると、エラーは発生しません。私は何をしますか?

どうもありがとうございました

コード:

@implementation MainViewController{

@private
int n;
NSMutableArray *_entryArray;
NSMutableArray *_timeSinceLastEntryArray;
NSMutableArray *_timeInterval;
NSMutableArray *_timeInBackup;
NSMutableArray *_timeOutBackup;
BOOL whichButton;


}
-(void)viewWillAppear:(BOOL)animated {

}

- (void)viewDidLoad
{
    [super viewDidLoad];
    n=0;
    _brain = [[Brain alloc] init];
    _entryArray = [[NSMutableArray alloc] initWithObjects:@"00:00:00",@"00:00:00",nil];
    _timeSinceLastEntryArray = [[NSMutableArray alloc] init];
    _timeInBackup = [[NSMutableArray alloc] initWithObjects:(NSNumber *)0, nil];
    _timeOutBackup = [[NSMutableArray alloc] initWithObjects:(NSNumber *)0, nil];
    _timeInterval = [[NSMutableArray alloc] init];


    UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc]
                                   initWithTarget:self
                                   action:@selector(dismissKeyboard)];

    [self.view addGestureRecognizer:tap];
}
4

1 に答える 1

4

これらの2行は、オブジェクトがゼロの配列になります。

_timeInBackup = [[NSMutableArray alloc] initWithObjects:(NSNumber *)0, nil];
_timeOutBackup = [[NSMutableArray alloc] initWithObjects:(NSNumber *)0, nil];

数値0を追加するのではなく、ポインタ0を追加します。これは。と同じnilです。言い換えれば、このコードは実際には次のとおりです。

_timeInBackup = [[NSMutableArray alloc] initWithObjects:nil, nil];
_timeOutBackup = [[NSMutableArray alloc] initWithObjects:nil, nil];

数値0を追加することが目的の場合は、次のようにします。

_timeInBackup = [[NSMutableArray alloc] initWithObjects:[NSNumber numberWithInt:0], nil];
_timeOutBackup = [[NSMutableArray alloc] initWithObjects:[NSNumber numberWithInt:0], nil];

さらに良いことに、これを行います:

_timeInBackup = [@[ @0 ] mutableCopy];
_timeOutBackup = [@[ @0 ] mutableCopy];

他にも空の配列があります:_timeSinceLastEntryArray_timeInterval。あなたが投稿したコードのどれも実際にエラーを引き起こしていません。どのアレイが実際に問題を引き起こしているのかを確実に知るために、より多くの詳細を提供する必要があります。

于 2013-03-22T01:33:49.033 に答える