-2

我有一个奇怪的错误弹出。它列出了我的应用程序是

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"];
}

任何关于为什么会发生这种情况或如何解决它的想法或帮助将不胜感激。

4

3 回答 3

0

像这样的代码

  • (无效) timerDidFire{

    NSLog(@"漏洞发现者");

    如果([用户数据计数]>0){

    updateTracker = [userDatas objectAtIndex:repeatCount];

    [self chartconnectionStart:@"3m"];

    }

}

快乐的编码............

于 2014-01-02T09:01:56.607 回答
0

您的 userDatas 数组为空。您很可能没有在手机上的用户默认值中填充任何内容,因此添加到数组的代码永远不会执行。您的模拟器上可能已经填充了一些数据,这就是它无法在手机上运行的原因

于 2013-12-31T01:39:18.957 回答
0

简单地在该行上为 condition 放置一个条件断点[userDatas count] == 0。或者放入一个if来捕捉它并在它上面设置一个断点。他们使用调试器来确定您是如何到达那里的以及相关的值是什么。

基本调试。

于 2013-12-31T01:44:33.170 回答