2012-03-02 12 views
0

私のアプリではELCTextfieldCellを使用しています。考え方は、ユーザーによって入力されたデータをいくつかの計算に使用することです。しかし問題があります。私は約14個の細胞を持っていますが、もちろんそれらはすべてスクリーンに収まるわけではありません。すべてのセルが表示されますが、一部が出ている場合は、completeNOになった場合、このコードは完璧に動作UITableViewCellが表示されない場合はnilです

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; 
} 

:私はOKをクリックすると、すべてのfielsが充填されているのであればアプリがチェックされます。 gdbtheCellの出力は次のようになります。

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

誰かが正しい方向に私をして下さい押すことができますか? :)

すべてのご協力をいただき、ありがとうございます。

EDIT

self.numberOfBoolsは、これらの行におけるboolsの合計だけNSNumberあります。彼らはUISwitchesを使用していますが、他のセルにはUITextFieldではなく、チェックから除外しました。

+0

何がself.numberOfBoolsですか? – Hanon

+0

これは単なるNSNumberです。いくつかのboolがあり、それらのために 'UISwitch'を追加したので、これらのセルにテキストはありません(テキストフィールド) – Novarg

答えて

1

Completeは、セル自体ではなく、セルをバッキングしているデータで計算する必要があります。私に説明させてください。

セルはデータを視覚的に表現したもので、表示されていないときは実行時に解放されるため、そのセルはゼロになります。

ただしcellForRowAtIndexPath:はデータからセルを作成しますか? ...ので、ユーザはcell.rightTextFieldを更新するときにdata.rightTextFieldを更新してから、完全にすべきであると同類何かを探している必要があります(またはそれそうにするのが普通です)、これはそう

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

擬似コードのコンパイルではありません要約すると、セルはデータを表し、永続することは保証されません。あなたはあなた自身がデータが保持されることを保証できます。したがって、データではなくセル上での完全性をテストします。

1

これは仕様です。 UITableViewのセルは再利用可能で、リソースを節約するために非表示にすると解放されます。セル内以外の場所にデータを格納する必要があります。

0

ここではダモと反サイクロプスに同意します。最初にテーブルのデータソースに

theCell.rightTextField.text 

を更新する必要があります。

次に、データソースに基づいて計算を行うことができます。 textFieldArrayをテーブルのデータソースとします。

NSMutableArray *textFieldArray;

myTableView.dataSource = textFieldArray;

次にテキストフィールドが更新されたときにデータソースを更新する必要があります。 最後に、データソースを処理することができます。

関連する問題