【问题标题】:Terminating app due to uncaught exception 'NSRangeException', reason: -[__NSArrayM objectAtIndex:]: index 0 beyond bounds for empty array' - 2由于未捕获的异常“NSRangeException”而终止应用程序,原因:-[__NSArrayM objectAtIndex:]:索引 0 超出空数组的范围-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 链接。
  • 赞成你的问题,看来你的分数少了,所以...

标签: ios json uitableview


【解决方案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 个单元格,并且该数组不为空。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-05-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-02-18
      相关资源
      最近更新 更多