【问题标题】:Trouble initialising NSMutableArray with NSString使用 NSString 初始化 NSMutableArray 时遇到问题
【发布时间】:2013-03-22 01:22:31
【问题描述】:

我在使用 2 个 NSString 对象 @"00:00:00" 初始化名为 _entryArrayNSMutableArray 时遇到问题。我收到以下错误:

由于未捕获的异常“NSRangeException”而终止应用,原因:“* -[__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];
}

【问题讨论】:

  • 您引用的例外情况是什么声明? (当然不是您上面列出的陈述之一。)
  • _timeInBackup = [[NSMutableArray alloc] initWithObjects:(NSNumber *)0, nil]; 应该是 _timeInBackup = [[NSMutableArray alloc] initWithObjects:@0, nil]; 或旧语法 _timeInBackup = [[NSMutableArray alloc] initWithObjects:[NSNumber numberWithInt:0], nil]; 同样适用于 _timeOutBackup
  • (但是,如果您对创建的数组进行 NSLog 记录,您可能会学到一些东西。_timeInBackup 和 _timeOutBackup 不包含您认为的值。)
  • 这是我想不通的。如果我只用 [[NSMutableArray alloc] init] 初始化 _entryArray,我不明白,但如果我尝试用对象初始化它,应用程序甚至都不会启动
  • _entryArray 没问题。但是 NSLog 一切,让你明白你有什么。

标签: ios nsstring nsmutablearray init


【解决方案1】:

这两行导致数组的对象为零:

_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 ] mutableCopy]
  • @xlc 感谢您注意到错字。固定。
猜你喜欢
  • 2011-10-29
  • 1970-01-01
  • 2020-11-22
  • 2014-12-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-02-17
相关资源
最近更新 更多