【发布时间】:2014-05-06 15:10:26
【问题描述】:
我在将项目添加到可变数组并让这些项目填充 UITableView 时遇到了问题。它们目前填充得很好,但是在我添加一个项目后,我在[reloadData]; 调用中得到“无法识别的选择器发送到实例”。我已经在许多不同的配置中尝试过它,但我似乎无法让它工作。当我禁用 reloadData 时,它会毫无问题地将多个项目添加到数组中,但是当我把它带回来时,我得到了同样的错误。这是我正在使用的代码:
- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex
{
switch (alertView.tag)
{
case 0:
_FiltrationString = [alertView textFieldAtIndex:0].text;
[_tankFilterArray addObject:_FiltrationString];
NSLog(@"Number of Filtration Parts Added: %lu", (unsigned long)_tankFilterArray.count);
break;
case 1:
_LightsString = [alertView textFieldAtIndex:0].text;
[_tankLightsArray addObject:_LightsString];
NSLog(@"Number of Lights Added: %lu", (unsigned long)_tankLightsArray.count);
break;
case 2:
_MovementString = [alertView textFieldAtIndex:0].text;
[_tankMovementArray addObject:_MovementString];
NSLog(@"Number of Water Movement Added: %lu", (unsigned long)_tankMovementArray.count);
break;
default:
break;
}
}
- (void)alertView:(UIAlertView *)alertView willDismissWithButtonIndex:(NSInteger)buttonIndex
{
[_tankFiltration reloadData];
[_tankLights reloadData];
[_tankMovement reloadData];
}
附加代码
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *cellIdentifier = @"Cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier];
if (!cell)
{
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellIdentifier];
}
switch (tableView.tag)
{
case 0:
_tankFiltration = [_tankFilterArray objectAtIndex:indexPath.row];
cell.textLabel.text = [_tankFilterArray objectAtIndex:indexPath.row];
break;
case 1:
_tankLights = [_tankLightsArray objectAtIndex:indexPath.row];
cell.textLabel.text = [_tankLightsArray objectAtIndex:indexPath.row];
break;
case 2:
_tankMovement = [_tankMovementArray objectAtIndex:indexPath.row];
cell.textLabel.text = [_tankMovementArray objectAtIndex:indexPath.row];
break;
case 3:
[self performSelector:@selector(saveButton)];
break;
default:
break;
}
cell.textLabel.font = [UIFont systemFontOfSize:14.0f];
cell.textLabel.textColor = [UIColor whiteColor];
return cell;
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
if (tableView.tag == 0)
{
// MAKE FILTRATION TAG HERE
return _tankFilterArray.count;
}
if (tableView.tag == 1)
{
// MAKE LIGHTS TAG HERE
return _tankLightsArray.count;
}
if (tableView.tag == 2)
{
// MAKE MOVEMENT TAG HERE
return _tankMovementArray.count;
}
NSLog(@"Tank Movement Array Items: %lu", (unsigned long)_tankMovementArray.count);
NSLog(@"Tank Lights Array Items: %lu", (unsigned long)_tankLightsArray.count);
NSLog(@"Tank Filtration Array Items: %lu", (unsigned long)_tankFilterArray.count);
return _tankMovementArray.count;
return _tankLightsArray.count;
return _tankFilterArray.count;
}
- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier
{
return self;
}
有人知道是什么原因造成的吗?我有几个人在我身边看了一下,没有人能弄清楚。我一如既往地提前感谢您的帮助。事实证明,这个问题是一个级联问题,它渗透到我的应用程序的其余部分,使测试变得困难。
更新编辑
修好了!
问题出在cellForRowAtIndexPath。具体来说:
_tankFiltration = [_tankFilterArray objectAtIndex:indexPath.row];
正在将 UITableView 重新声明为数组。我不敢相信我以前没见过。非常感谢大家!
【问题讨论】:
-
我们可能需要更多代码...基本上它告诉您 _tankFiltration 是一个字符串(不是表或集合)...您有更多代码可以处理 _tankFiltration 吗?
-
请提供更多代码,不足以理解您的问题。
-
您需要发布更多代码。 _tankFiltration、_tankLights 和 _tankMovement 中的一个或多个是 NSString,而不是 UITableView。
-
添加了更多代码。如果您想看更多,请告诉我。 _filterString 是一个被添加到数组 _tankFilterArray 中的 NSString。
-
您在这里为
_tankFiltration分配了一个字符串:_tankFiltration = [_tankFilterArray objectAtIndex:indexPath.row];,然后稍后在其上调用reloadData...为什么同时将它用作字符串和表格视图时间?
标签: ios reloaddata unrecognized-selector