由于未捕获的异常“NSRangeException”而终止应用程序,原因:“-[__NSCFArray objectAtIndex:]: index (14) beyond bounds (14)”

Posted

技术标签:

【中文标题】由于未捕获的异常“NSRangeException”而终止应用程序,原因:“-[__NSCFArray objectAtIndex:]: index (14) beyond bounds (14)”【英文标题】:Terminating app due to uncaught exception 'NSRangeException', reason: '-[__NSCFArray objectAtIndex:]: index (14) beyond bounds (14)' 【发布时间】:2016-10-10 04:18:01 【问题描述】:

我是 ios 开发人员的新手。我正在制作一个应用程序,我在其中收到来自 JSON 的响应。但是当我单击按钮显示下一个 UITableView 时。 我有两个问题要问大家。

1.)它之前会显示空值。我必须向下滚动显示值。

2.) 向下滚动后调试错误显示“由于未捕获的异常 'NSRangeException' 导致应用程序终止,原因:'-[__NSCFArray objectAtIndex:]: index (14) beyond bounds (14)”

对不起,我的英语不好。我会说一点英语。

我们必须点击按钮才能转到下一个 UITableView。

- (IBAction)btnf10

    NSMutableDictionary *content = [NSMutableDictionary dictionary];
    [content setValue:[[AppSetting sharedInstance] token] forKey:@"ewitoken"];
    //[content setValue:gloablOnWherehouse.selectedWhereHouse forKey:@"model_Name"];
    [[EWIConnector connector] requestEWIService:@"special_selected_f10" requestData:content delegate:self];

requestEWIServiceStart 会检查字符串。

    - (void) requestEWIServiceStart:(EWIConnector *)connector

        NSLog(@"start %@",connector.endpoint);
    

    - (void) requestEWIServiceFinish:(EWIConnector *)connector responseData:(NSDictionary *)responseData

        NSLog(@"finish %@",connector.serviceName);
        NSLog(@"response %@",responseData);

        if ([connector.serviceName isEqualToString:@"special_selected_f10"])
        
            NSLog(@"finish %@",connector.serviceName);
            NSDictionary *content = responseData[@"content"];
            NSString *stAlertMes = [content objectForKey:@"alertMessage"];
            stAlertMes = [self getString:stAlertMes];
            NSLog(@"AlertMSG : %@", stAlertMes);
            if (![stAlertMes isEqualToString:@""]) 
                NSLog(@"ALERT MESSAGE : %@", stAlertMes);
                gloablOnWherehouse.arTableDataSelected = [[NSArray alloc] init];
            
            else
            
                NSLog(@"HAS DATA");
                gloablOnWherehouse.arTableDataSelected = [content objectForKey:@"DataList_SPI_DetailCollection"];
                [self.tableViewWhereHoseList reloadData];

                labelStatus.text = @"F11";

            
        
       else
    
        NSLog(@"response %@",responseData);
    

用于响应数据的 UITableView 2。

- (void)viewDidLoad 
    [super viewDidLoad];
    // Do any additional setup after loading the view.

    globlOnDisplayEffect = [GlobalVariable sharedInstance];
    globlOnDisplayEffect.arTableDataSelectedWhereHouse = [[NSArray alloc] init];
    [self.tableViewDetailList reloadData];



- (NSInteger) numberOfSectionsInTableView:(UITableView *)tableView 
    return 1;


- (NSInteger) tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section 
    return (globlOnDisplayEffect.arTableDataSelected)?[globlOnDisplayEffect.arTableDataSelected count]: 100;




- (UITableViewCell *) tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
    static NSString *simpleTableIdentifier = @"DisplayEffectQtyViewCell";
    DisplayEffectQtyViewCell *cell = [self.tableViewDetailList dequeueReusableCellWithIdentifier:simpleTableIdentifier forIndexPath:indexPath];
    if(cell == nil)
    
        NSArray *nib = [[NSBundle mainBundle] loadNibNamed:@"DisplayEffectQtyViewCell" owner:self options:nil];
        cell = [nib objectAtIndex:0];

     else 
        if (globlOnDisplayEffect.arTableDataSelected) 
            NSMutableArray *myMutbleArray = [[NSMutableArray alloc] init];
            [myMutbleArray addObject:globlOnDisplayEffect.arTableDataSelected];

            if (myMutbleArray) 
                NSDictionary *myDic = [globlOnDisplayEffect.arTableDataSelected objectAtIndex:indexPath.row];
                NSDictionary *cont = [myDic objectForKey:@"DataList_SPI_DetailF10"];
                NSString *f10_cmpt = [self getString:[cont objectForKey:@"f10_cmpt"]];
                NSString *f10_dt = [self getString:[cont objectForKey:@"f10_dt"]];
                NSString *f10_item = [self getString:[cont objectForKey:@"f10_item"]];
                NSString *f10_lot = [self getString:[cont objectForKey:@"f10_lot"]];
                NSString *f10_model = [self getString:[cont objectForKey:@"f10_model"]];
                NSString *f10_of = [self getString:[cont objectForKey:@"f10_of"]];
                NSString *f10_semi = [self getString:[cont objectForKey:@"f10_semi"]];
                NSString *f10_tm = [self getString:[cont objectForKey:@"f10_tm"]];
                NSString *f10_uncmp = [self getString:[cont objectForKey:@"f10_uncmp"]];

                [cell setf10_cmpt:f10_cmpt setf10_dt:f10_dt setf10_item:f10_item setf10_lot:f10_lot setf10_model:f10_model setf10_of:f10_of setf10_semi:f10_semi setf10_tm:f10_tm setf10_uncmp:f10_uncmp];


            
        
    
    return cell;


【问题讨论】:

添加异常断点以查看错误发生的位置。 当我是异常断点。 “DisplayEffectQtyViewCell *cell = [self.tableViewDetailList dequeueReusableCellWithIdentifier:simpleTableIdentifier forIndexPath:indexPath];”上的错误在我从空白单元格向下滚动到单元格上显示的值之后。 【参考方案1】:

数组的索引边界,这是一个常见的问题。数组中第 14 位没有对象。

在加载 tableview 之前,NSLog 使用控制台中的循环记录所有数据,您必须在 Cell 中显示。

  else
        
            NSLog(@"HAS DATA");
            gloablOnWherehouse.arTableDataSelected = [content objectForKey:@"DataList_SPI_DetailCollection"];

           // [self.tableViewWhereHoseList reloadData];

            labelStatus.text = @"F11";

        

还要检查您正在加载的表格视图并计算它的数量。我觉得应该是

 [globlOnDisplayEffect.arTableDataSelected count]>0 ?[globlOnDisplayEffect.arTableDataSelected count]:100. 

解释一下,为什么当 [globlOnDisplayEffect.arTableDataSelected count]==0 时会显示 100 个单元格。 else 的数据源是什么?

- (NSInteger) tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section 

 // NSLog what you return.... 
return (globlOnDisplayEffect.arTableDataSelected)?[globlOnDisplayEffect.arTableDataSelected count]: 100;

还要检查您的表格单元格条件。 **

【讨论】:

哦,抱歉返回值错误(100)。我将写返回值是 1。现在你的代码可以解决我的问题。但我有一个问题。如何解决第一个问题。因为我只能向下滚动显示数据。 请先修复它。希望第二个问题能​​自动解决。您的表格单元格没有获取单元格的数据,因此它崩溃了。如果您得到解决方案,请点赞并接受我的回答。 @รัฐพงศ์ ตุรงค์เรือง 我会关注你的评论。它的工作(这不是来自数组的错误)。但是 UITable 直到向下滚动才能响应数据。请帮帮我。 在表格单元格中,如果 (globlOnDisplayEffect.arTableDataSelected) 始终是真人!尝试改变条件。在进入单元格对象之前打印单元格对象 你能给我举个例子吗?因为我是新开发者。我有一点经验。

以上是关于由于未捕获的异常“NSRangeException”而终止应用程序,原因:“-[__NSCFArray objectAtIndex:]: index (14) beyond bounds (14)”的主要内容,如果未能解决你的问题,请参考以下文章

由于未捕获的异常“NSRangeException”而终止应用程序,原因:“*** -[__NSArrayM objectAtIndex:]:索引 0 超出空数组的范围”

由于未捕获的异常“NSRangeException”而终止应用程序,原因:-[__NSArrayM objectAtIndex:]:索引 0 超出空数组的范围

由于未捕获的异常“NSRangeException”而终止应用程序,原因:“-[__NSCFArray objectAtIndex:]: index (14) beyond bounds (14)”

由于未捕获的异常“NSRangeException”而终止应用程序,原因:-[__NSArrayM objectAtIndex:]:索引 0 超出空数组的范围-2

*** 由于未捕获的异常“NSRangeException”而终止应用程序,原因:“*** -[__NSArrayI objectAtIndex:]: index 3 beyond bounds [0

*** 由于未捕获的异常“NSRangeException”而终止应用程序,原因:“*** -[__NSArray0 objectAtIndex:]: index 0 beyond bounds fo