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