【发布时间】:2014-01-17 23:28:45
【问题描述】:
我有一个奇怪的错误弹出。它列出了我的应用是
Terminating app due to uncaught exception 'NSRangeException', reason: '*** -[__NSArrayM objectAtIndex:]: index 0 beyond bounds for empty array'
让我感到困惑的是,该应用程序在模拟器中运行得非常好,但是当我在我的设备上对其进行测试时,我得到了这个错误。我已将问题隔离到以下代码行:
updatingTracker = [userDatas objectAtIndex:repeatCount];
下面是其余的相关代码:
[self getUserDatas];
[self timerDidFire];
-(void) getUserDatas
{
userDatas = [[NSMutableArray alloc] init];
NSUserDefaults *userdef = [NSUserDefaults standardUserDefaults];
int count = [[userdef objectForKey:@"user_count"] intValue];
for(int i=0;i<count;i++)
{
NewTracker *newtrack=[[NewTracker alloc] init];
newtrack.FromCurrency = [userdef objectForKey:[NSString stringWithFormat:@"from_string_%d",i]];
newtrack.ToCurrency = [userdef objectForKey:[NSString stringWithFormat:@"to_string_%d",i]];
newtrack.savedCurrency = [userdef objectForKey:[NSString stringWithFormat:@"save_currency_%d",i]];
newtrack.userTarget = [userdef objectForKey:[NSString stringWithFormat:@"user_target_%d",i]];
newtrack.trackerId = [userdef objectForKey:[NSString stringWithFormat:@"tracker_id_%d",i]];
newtrack.realtimeBase = [userdef objectForKey:[NSString stringWithFormat:@"realtime_base_%d",i]];
newtrack.realtimeTarget = [userdef objectForKey:[NSString stringWithFormat:@"realtime_target_%d",i]];
newtrack.realtimeUSD = [userdef objectForKey:[NSString stringWithFormat:@"realtime_USD_%d",i]];
[userDatas addObject:newtrack];
}
}
- (void) timerDidFire
{
NSLog(@"bug finder");
updatingTracker = [userDatas objectAtIndex:repeatCount];
[self chartconnectionStart:@"3m"];
}
任何关于为什么会发生这种情况或如何解决它的想法或帮助将不胜感激。
【问题讨论】:
-
错误信息告诉你到底出了什么问题。
count可能被设置为 0,因此您分配数组但从不向其中添加任何对象,当您尝试访问它时,您会收到NSRangeException错误。试试int count = 10看看会发生什么 - 如果它有效,您就知道下一步该去哪里了。 -
谢谢,成功了。导致其他错误,但现在我至少了解发生了什么。欣赏!
标签: ios iphone objective-c ios-simulator nsrangeexception