2013-03-22 44 views
0

我在初始化NSMutableArray时出现问题_entryArray与2 NSString对象@"00:00:00"。我收到以下错误:用NSString初始化NSMutableArray问题

Terminating app due to uncaught exception 'NSRangeException', reason: '* -[__NSArrayM objectAtIndex:]: index 1 beyond bounds for empty array'

当我尝试在没有任何对象的情况下初始化它时,我没有得到任何错误。我该怎么办?

非常感谢您

代码:

@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]; 
} 
+1

什么声明给你引用的例外? (肯定不是你上面列出的语句之一。) – 2013-03-22 01:25:08

+0

'_timeInBackup = [[NSMutableArray alloc] initWithObjects:(NSNumber *)0,nil];'should be'_timeInBackup = [[NSMutableArray alloc] initWithObjects:@ 0, nil];''或旧的语法'_timeInBackup = [[NSMutableArray alloc] initWithObjects:[NSNumber numberWithInt:0],nil];'_timeOutBackup'也一样。 – dasblinkenlight 2013-03-22 01:27:19

+0

(但是,如果你使用NSLog创建的数组,你可能会学到一些东西,_timeInBackup和_timeOutBackup不包含你认为它们的值。) – 2013-03-22 01:27:26

回答

4

这两行导致阵列,零个对象:

_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。没有发布的代码实际上是导致错误。您需要提供更多详细信息以确定哪些阵列确实会导致问题。

+0

+1好眼睛,这是绝对正确的! – borrrden 2013-03-22 01:36:31

+0

应该是'[@ [@ 0] mutableCopy]' – 2013-03-22 02:02:18

+0

@xlc感谢您注意到错字。固定。 – rmaddy 2013-03-22 02:45:12