如果 UITableViewCell 不可见,则为 nil



在我的应用程序中,我使用的是ELCTextfieldCell。这个想法是使用用户输入的数据进行一些计算。但问题是存在的。我有大约14个细胞,当然,它们不可能全部放在屏幕上。因此,当我单击OK时,应用程序正在检查是否填写了所有字段:

BOOL complete = YES;
for (int i = 0; i < [cellTextArray count] - [self.numberOfBools intValue]; i++) {
    NSIndexPath *iPath = [NSIndexPath indexPathForRow:i inSection:0];
    ELCTextfieldCell *theCell = (ELCTextfieldCell *)[self.tableView cellForRowAtIndexPath:iPath];
    if (!theCell.rightTextField.text)
        complete = NO;
}

如果所有单元格都可见,则此代码非常有效,但如果某些单元格不可见,则complete将变为NOgdbtheCell的输出为:

(gdb) po theCell
Can't print the description of a NIL object.

有人能把我推向正确的方向吗?:)

我们将不胜感激,谢谢。

编辑

self.numberOfBools只是在这些行中总共有布尔的NSNumber。它们使用的是UISwitches,而不是UITextField作为其他单元格,所以我将它们排除在检查之外。

Complete需要根据支持单元格的数据计算,而不是根据单元格本身计算。让我解释一下。

单元格是数据的可视化表示,当它不在视图中时,运行时将释放它,这就是它为零的原因。

但是cellForRowAtIndexPath:根据数据创建单元格,对吗?(或者这样做是正常的)所以当用户更新cell.rightTextField时,你应该更新data.rightTextField,然后完成应该看起来类似于。。。这是不可编译的伪代码

complete = YES;
for (Data* data in myDataSet) {
    if (!data.rightTextField)
        complete = NO;
}

因此,在摘要中,单元格表示数据,并且不能保证它们持久存在。您自己可以确保数据持久化;因此测试数据的完整性,而不是测试单元格。

这是经过设计的。UITableView中的细胞是可重复使用的,当它们不可见时可以释放以节省资源。您必须将数据存储在单元格以外的其他位置。

我同意这里的达莫和反气旋。你应该已经更新

theCell.rightTextField.text

首先输入到表的数据源中。

然后您可以根据数据源进行计算。让textFieldArray作为表的数据源。

NSMutableArray *textFieldArray;

myTableView.dataSource = textFieldArray;

然后需要在更新文本字段时更新数据源。最后,您可以处理数据源。

最新更新