在我的应用程序中,我使用的是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
将变为NO
。gdb
中theCell
的输出为:
(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;
然后需要在更新文本字段时更新数据源。最后,您可以处理数据源。