【问题标题】:[__NSCFString reloadData]: unrecognized selector sent to instance[__NSCFString reloadData]:发送到实例的无法识别的选择器
【发布时间】: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


【解决方案1】:

如果 _FiltrationString 是一个 NSString 你应该使用这个命令:

  _FiltrationString =  [NSString stringWithFormat:@"%@",[alertView textFieldAtIndex:0].text]; 
  [_tankFilterArray addObject:_FiltrationString];

而不是

       _FiltrationString = [alertView textFieldAtIndex:0].text;

该命令将 _FiltrationString 等同于警报视图文本字段的地址。

【讨论】:

  • 试过了,结果和以前一样。
  • 奇怪的是你有 3 个 reloaddata 语句 - 我没有看到你的最新更新,但 reload data 是调用一系列 tableview 委托方法的触发器,包括 cellforrowatindexpath,所以你只需要重新加载活动表视图上的数据是什么 - _tankFiltration。 =tanklight 和 _tankmovement ?你有多少个表格视图?
  • 问题是我有 3 个 reloadData 调用,因为有三个单独的 tableViews。所有这些都附加了单独的数组。这就是为什么我在从 alertView 收集字符串之后调用每个重新加载。
  • 只是问-如果我这样做,您对“=”符号的使用会很麻烦-> _tankFiltration = [alertView textFieldAtIndex:0].text; - 我将有效地将我的 tableview 更改为 NSCFstriong 对象。它将创建上面的错误消息。
  • _tankFiltration = [_tankFilterArray objectAtIndex:indexPath.row];这怎么不给表视图ivar分配一个字符串?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-11-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多