Ich habe UICollectionView
mit benutzerdefinierten Flow-Layout, welcher Zweck ist, Elemente zu löschen. Um Index zu erhalten benutze ich Funktion:Absender manchmal senden falschen Wert
Manchmal (in seltenen Fällen) habe ich crash. Als ich mich damit beschäftigte, fand ich manchmal, dass [sender tag]
falsch war, tatsächlich höher als die Anzahl der Elemente. Warum ist das passiert? Ich habe festgestellt, dass es 8 sendet, wenn Array nur 5 Elemente hatte.
Knopf einfach 40x40 Breite/Höhe-Bild ist, oberhalb UITableViewCell wie es angebracht:
UIButton *button = [UIButton new];
[button setImage:[UIImage imageNamed:@"m_delete"] forState:UIControlStateNormal];
if (self.shouldEdit){
self.layout.longPressGestureRecognizer.minimumPressDuration = 0.3f;
NSLog(@"1 blk called");
[button addTarget:self
action:@selector(aMethod:)
forControlEvents:UIControlEventTouchUpInside];
[button setTag:indexPath.row];
[cell addSubview:button];
[button mas_makeConstraints:^(MASConstraintMaker *make) {
make.left.equalTo(cell.mas_left).with.offset(2);
make.top.equalTo(cell.mas_top).with.offset(2);
}];
}
Ich glaube, Sie haben Ihre eigene Frage beantwortet. Wie Sie bereits sagten, bestand der Zweck, den Sie für das Tag verwendet haben, darin, Elemente zu löschen. Ein Tag bleibt jedoch statisch, es sei denn, Sie ändern es. Nehmen wir also an, Sie hätten 8 Elemente mit dem Index 0 - 7 und daher die Tags 0 - 7. Dann löschen Sie das erste Element in der Liste. Jetzt hast du 7 Items, mit den Indizes 0 - 6. ABER du hast die Taste mit dem Tag 0 gelöscht, und die restlichen Button-Tags sind noch mit 1 - 7 nummeriert. Ein Tag von 7 mit deinem neuen, kleineren Array von 6 Items ist auch groß. Löschen Sie nicht basierend auf einem festen Index-Tag. Löschen basiert auf dem Index der Schaltfläche in der Sammlung. – christopherdrum
@christopherdrum gut, in diesem Fall werde ich jedes Mal abstürzen, aber es passiert in wirklich seltenen Fällen. Danke für die Antwort aber –
Nein, Sie werden nicht jedes Mal einen Absturz bekommen. Das hängt von der Reihenfolge ab, in der Sie die Dinge löschen. Wenn Sie in umgekehrter Reihenfolge von unten nach oben löschen, wird es wahrscheinlich überhaupt nicht abstürzen. – christopherdrum