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

Posted

技术标签:

【中文标题】由于未捕获的异常“NSRangeException”而终止应用程序,原因:-[__NSArrayM objectAtIndex:]:索引 0 超出空数组的范围-2【英文标题】:Terminating app due to uncaught exception 'NSRangeException', reason: -[__NSArrayM objectAtIndex:]: index 0 beyond bounds for empty array' - 2 【发布时间】:2014-12-10 08:02:24 【问题描述】:

在 json 中作为新人工作,我想在 tableview 单元格中显示数据,但是当我填充我的 table view 单元格时,它给出了上面提到的异常。我以前曾问过这个问题,但没有得到确切的解决方案 我收到这样的响应,因为确实加载了

-(void)inboxmessagesGetSuccess:(FBGenericWebHandler*)handler response:(NSDictionary*)response

    NSLog (@"Count %d", [[response objectForKey:@"messageResponse"] length] );
    NSMutableArray *inboxArray = [[NSMutableArray alloc] init];
   NSArray *firstarray=[[[response objectForKey:@"messageResponse"] objectAtIndex:1] objectForKey:@"messages"];
    for(NSDictionary *tmp in firstarray)
    
        NSMutableDictionary *messages=[[NSMutableDictionary alloc]init];
        [messages setValue:[tmp objectForKey:@"messageId"] forKey:@"messageId"];
//        [self.inboxmessagesarray addObject:messages];




    
    [self.activitiesTableView_ reloadData];








但是当我填充我的单元格时

-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath

    static NSString *tableviewidentifier = @"cell";
    tablecellTableViewCell *cell= [self.activitiesTableView_ dequeueReusableCellWithIdentifier:tableviewidentifier];

    if(cell==nil)
    
        cell = [[tablecellTableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:tableviewidentifier];
    if(indexPath.row == [self tableView:tableView numberOfRowsInSection:indexPath.section] - 1)
        // [[cell textLabel] setText:@"Load more records"];
    

    UILabel *valuedate = (UILabel *)[cell viewWithTag:21];
    UILabel *msg = (UILabel *)[cell viewWithTag:22];
    UILabel *date = (UILabel *)[cell viewWithTag:23];
    UILabel *time = (UILabel *)[cell viewWithTag:24];
   valuedate.text=[[self.inboxmessagesarray objectAtIndex:indexPath.row]objectForKey:@"messageId"];
    return cell;

它给出了一个例外。 thanx 提前真的卡在里面很多天了。

【问题讨论】:

在第一个数组中 2o 个对象即将到来。并且在 inboxmessages 数组消息 id 正在填充,但是当我填充 tableview 单元格时,它给出了一个异常。 不,现在是 15,你可以查看我附加的项目 我是不是犯了一些愚蠢的错误,因为我把我的 pjct 附在上面了.. 从问题中删除您的 Dropbox 链接。 赞成你的问题,看来你的分数少了,所以... 【参考方案1】:

将 self.lblArray for 循环更改为 inboxmessagesGetSuccess 方法

-(void)inboxmessagesGetSuccess:(FBGenericWebHandler*)handler response:(NSDictionary*)response

  NSMutableArray *inboxArray = [[NSMutableArray alloc] init];
  NSArray *firstarray=[[[response objectForKey:@"messageResponse"] objectAtIndex:1] objectForKey:@"messages"];
  for(NSDictionary *tmp in firstarray)
  
    NSMutableDictionary *messages=[[NSMutableDictionary alloc]init];
    [messages setValue:[tmp objectForKey:@"messageId"] forKey:@"messageId"];
    [self.inboxmessagesarray addObject:messages];
  

    for (int i=0; i<self.inboxmessagesarray.count; i++)
  
    [self.lblArray addObject:[NSString stringWithFormat:@"cell Number %d",i]];
  

  [self.activitiesTableView_ reloadData];

【讨论】:

很高兴为您提供帮助。享受编码:)【参考方案2】:

试试这个

-(void)inboxmessagesGetSuccess:(FBGenericWebHandler*)handler response:(NSDictionary*)response
    
        if(response && response[@"messageResponse"])
        
            NSArray *messageResponseList = response[@"messageResponse"];
            if(messageResponseList && [messageResponseList count]>=1)
            
                NSLog (@"Count %lu", (unsigned long)[messageResponseList count]);
                NSMutableArray *inboxArray = [[NSMutableArray alloc] init];
                NSDictionary *message = [messageResponseList objectAtIndex:1];
                if(message && message[@"messages"])
                
                    NSArray *firstarray=[[messageResponseList objectAtIndex:1] objectForKey:@"messages"];
                    for(NSDictionary *tmp in firstarray)
                    
                        NSMutableDictionary *messages=[[NSMutableDictionary alloc]init];
                        [messages setValue:[tmp objectForKey:@"messageId"] forKey:@"messageId"];
                        [self.inboxmessagesarray addObject:messages];
                    
                
            

        

         [self.activitiesTableView_ reloadData];
    

【讨论】:

【参考方案3】:

而不是:

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

return self.lblArray.count;

你应该有:

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

return self.inboxmessagesarray.count;

现在,您的 tableview 尝试在应用程序加载之前填充 -(void)inboxmessagesGetSuccess:(FBGenericWebHandler*)handler response:(NSDictionary*)response 方法被调用,因此此时您的 inboxmessagesarray 为空,但您的datasource 告诉 uitableview 它应该有 lblArray.count 个单元格,并且该数组不为空。

【讨论】:

以上是关于由于未捕获的异常“NSRangeException”而终止应用程序,原因:-[__NSArrayM objectAtIndex:]:索引 0 超出空数组的范围-2的主要内容,如果未能解决你的问题,请参考以下文章

由于未捕获的异常“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