在我的应用中,我正在使用ELCTextfieldCell
。我们的想法是使用用户输入的数据进行一些计算。但是有问题。我有大约14个单元格,当然,它们不能全部适合屏幕。因此,当我点击OK
时,应用程序正在检查所有fiel是否已填写:
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
。 theCell
中gdb
的输出为:
(gdb) po theCell
Can't print the description of a NIL object.
有人可以帮助我朝正确的方向发展吗? :)
所有帮助将不胜感激,谢谢。
修改
self.numberOfBools
只是NSNumber
,在这些行中总共有bool。他们使用UISwitches
而非UITextField
作为其他单元格,因此我将其排除在支票之外。
答案 0 :(得分:1)
这是设计的。 UITableView
中的单元格是可重用的,并且可以在不可见时释放它们以节省资源。您必须将数据存储在除了单元格之外的其他位置。
答案 1 :(得分:1)
完全需要计算支持细胞而不是细胞本身的数据。让我解释一下。
单元格是数据的直观表示,当它不在视图中时,运行时将释放它,这就是它为零的原因。
然而 cellForRowAtIndexPath:从数据创建单元格吗? (或这样做是正常的)所以当用户更新cell.rightTextField时你应该更新data.rightTextField然后完成应该看起来类似于...这是伪代码不可编译
complete = YES;
for (Data* data in myDataSet) {
if (!data.rightTextField)
complete = NO;
}
因此,总结单元格表示数据,并且不保证它们会持续存在。您自己可以确保数据持久化;因此,测试数据的完整性,而不是细胞。
答案 2 :(得分:0)
我同意Damo和anticyclope的观点。你应该更新
theCell.rightTextField.text
首先进入表格的数据源。
然后,您可以根据数据源进行计算。
让textFieldArray
成为表格的数据源。
NSMutableArray *textFieldArray;
myTableView.dataSource = textFieldArray;
然后需要在更新文本字段时更新数据源。 最后,您可以处理数据源。