Bazı ayarları kullanıcıya sunan bir UITableView var. UISwitch 'On' konumunda değilse, bazı hücreler gizlenir. Aşağıdaki kod var:UISwitch ile UITableViewCell gösterme ve gizleme çok hızlı çöküyor
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
return switchPush.on ? 6 : 1;
}
// Hooked to the 'Value Changed' action of the switchPush
- (IBAction)togglePush:(id)sender {
NSMutableArray *indexPaths = [NSMutableArray arrayWithCapacity:0];
for(int i = 1; i <= 5; i++) {
[indexPaths addObject:[NSIndexPath indexPathForRow:i inSection:0]];
}
[tableView beginUpdates];
if(switchPush.on) {
[tableView insertRowsAtIndexPaths:indexPaths withRowAnimation:UITableViewRowAnimationAutomatic];
} else {
[tableView deleteRowsAtIndexPaths:indexPaths withRowAnimation:UITableViewRowAnimationAutomatic];
}
[tableView endUpdates];
}
Bu işler beklendiği gibi, ben (çift dokunarak) arka arkaya iki kez UISwitch geçene kadar, bu durumda bir
Invalid table view update. The application has requested an update to the table view that is inconsistent with the state provided by the data source.
ile uygulama çöker içinde Hücre animasyonu hala çalarken anahtarın orijinal konumuna geri döndüğünden numberOfRowsInSection değerinin yanlış dönüş değerinden kaynaklandığını biliyorum. Geçişi devre dışı bırakmayı ve diğer olay işleyicileri altındaki kodu çektiğimi denedim, ancak hiçbir şey kilitlenmeyi engelliyor gibi görünmüyor. Animasyon yerine reloadData kullanmak da problemi çözer, ancak güzel animasyonları tercih ederim.
Bunu gerçekleştirmenin doğru bir yolu bilen var mı?
UIToggle nedir? UISwitch'i mi kastediyorsun? – Mundi
Evet Yaptım, sorunu düzelttim. –