私は小さな問題を抱えていますが、これは本当に古典的 (dequeueReusableCellWithIdentifier によって再利用されるとセルが混同される) と思われますが、同様の質問を既に見ていて、答えが見つかりません。
したがって、古典的なコンテキスト:UITableView
ストーリーボードにプロトタイプ セルがあり、1 つは画像 (非同期にフェッチされた) で、もう 1 つは UITextView です。
両方で問題が発生したため、テキスト セルに注目してみましょう。ネットワークが原因ではないことがわかります。
上下にスクロールすると、細胞が混ざります。関数内のデータに応じてテキスト値を設定したためだと思いますが、cellForRowAtIndexPath
わかりません。
私の例のセルは次のとおりです。
---------------
| 1. "TEXT1" |
---------------
| |
| 2. IMAGE2 |
| |
---------------
| 3. "TEXT3" |
---------------
| 4. "TEXT4" |
---------------
| |
| 5. IMAGE5 |
| |
---------------
私はずっと下にスクロールします。すべて問題ありません。一番下でバウンスすると、セル 3 と 4 がリロードされます (関数に NSLog を入れましたcellForRowAtIndexPath
)。最初にセル 4 がリロードされ、次にセル 3 がリロードされます (ログによると)。問題は、セル 3 と 4 の両方が値として "TEXT3" になることです! つまりNSLog
、関数で UITextField.text に値を指定すると、同じテキスト値はありませんが、シミュレーターの画面では.. ?
これが私のコードです:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
// Getting data for row from indexPath
Data *data = [self.dataArray objectAtIndex:indexPath.row];
NSString *cellIdentifier = [NSString stringWithFormat:@""];
if (data.type == 1) { // Text type
cellIdentifier = @"TextCell";
}
else if (data.type == 2){
cellIdentifier = @"PhotoCell";
}
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier forIndexPath:indexPath];
// Getting various cell elements
if (data.type == 1) {
// Text is 1000
UITextView *textView = (UITextView *)[tableView viewWithTag:1000];
textView.text = data.text;
}
else if (data.type == 2){
//STUFF FOR PHOTO TYPE OF DATA
}
return cell;
}
ところで、iOS6 のシミュレーターではこのエラーが発生するが、iOS7 では発生しないと言うと便利です (ただし、メモリ管理が異なるだけかもしれません..)
助けてくれてどうもありがとう!