由于未捕获的异常“NSRangeException”而终止应用程序,原因:-[__NSArrayM objectAtIndex:]:索引 0 超出空数组的范围
Posted
技术标签:
【中文标题】由于未捕获的异常“NSRangeException”而终止应用程序,原因:-[__NSArrayM objectAtIndex:]:索引 0 超出空数组的范围【英文标题】:Terminating app due to uncaught exception 'NSRangeException', reason: -[__NSArrayM objectAtIndex:]: index 0 beyond bounds for empty array' 【发布时间】:2014-12-10 06:38:05 【问题描述】:我是 ios 新手。我正在制作一个应用程序,在该应用程序中我得到了来自 json 的响应,一切正常。我将响应存储在一个数组中,但是当我像这样将数组值设置为 tableview 单元格时
valuedate.text=[[self.inboxmessagesarray objectAtIndex:indexPath.row]objectForKey:@"messageId"]
这是我所误解的一个例外。提前感谢。下面是我的示例代码。
-(void)viewdidload
NSMutableDictionary *callDict =[[NSMutableDictionary alloc] init];
[callDict setObject:@"messages-getModuleMessages" forKey:@"call"];
[callDict setObject:FB_API_KEY forKey:@"accessSecret"];
NSString *x=[FBUserManager sharedUserManager].authToken;
[callDict setObject:x forKey:@"authToken"];
[callDict setObject:@"json" forKey:@"format"];
[callDict setObject:@"inbox" forKey:@"callType"];
FBGenericWebHandler *handler = [[FBGenericWebHandler alloc] init];
handler.delegate = self;
[handler Inboxmessages:callDict];
handler = nil;
[MBProgressHUD showHUDAddedTo:self.view animated:YES];
我得到这样的回应
-(void)inboxmessagesGetSuccess:(FBGenericWebHandler*)handler response:(NSDictionary*)response
[MBProgressHUD hideHUDForView:self.view animated:YES];
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;
【问题讨论】:
你的numberOfRowsInSection:
方法是什么?
另外,您的单元格是否定义为情节提要中的原型单元格?如果是这样,您可以跳过整个 if (cell==nil...
位。另外,我建议创建一个 UITableViewCell 子类并使用IBOutlet
属性,而不是搜索带有标签的视图。最后,使用传递给方法的tableView
比使用self.activitiesTableView_
更简洁(并从属性中去掉尾随的_)
【参考方案1】:
它很简单,因为错误说“'NSRangeException',原因:-[__NSArrayM objectAtIndex:]: index 0 beyond bounds for empty array'”,你的数组是空的,你正试图访问它的第 0 个(即第一个元素) .
您可以做的是在检索值之前进行检查:if ([yourArray count] > 0)....
if (self.inboxmessagesarray.count > 0)
valuedate.text=[[self.inboxmessagesarray objectAtIndex:indexPath.row]objectForKey:@"messageId"]
【讨论】:
嗯,但我怎样才能让这个数组在视图中加载为数组包含 20 个对象 嗯,但收件箱消息数组在 uitable 视图中为零,但作为响应,我正在获取对象.. 但是这些对象没有以 uitable 方法出现,为什么? 如果您的负载异步完成,这是可以预料的。这就是为什么我问你的numberOfRowsInSection
是什么 - 只要该方法返回 0,数组就可以为零
我正在定义部分中的行数返回 20【参考方案2】:
你可能有 self.inboxmessagesarray.count+1(加 1 用于加载更多)innumberOfRowsInSection: 方法和当 self.inboxmessagesarray.count == 0 那么你是valuedate.text=[[self.inboxmessagesarray objectAtIndex:indexPath.row]objectForKey:@"messageId"];
这会引发此异常
【讨论】:
那么它将如何处理 if (self.inboxmessagesarray.count > 0) valuedate.text=[[self.inboxmessagesarray objectAtIndex:indexPath.row]objectForKey:@"messageId"]以上是关于由于未捕获的异常“NSRangeException”而终止应用程序,原因:-[__NSArrayM objectAtIndex:]:索引 0 超出空数组的范围的主要内容,如果未能解决你的问题,请参考以下文章
由于未捕获的异常“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