2017-08-29 11 views
19

Sorun, başlık gibidir. İşte benim kodum. Ve doğrudan silmek için sağdan sola operasyonu kaydırın bulmak Bu kilitlenme günlük olan iOS11UITableView hücresinin iOS11'de hızlı ve sürekli olarak silinmesi için hızlıca kaydırılıyorsa

let model = self.customRules.remove(at: indexPath.row) //delete datasource 
self.dao.delete(model: model) //delete data in database 
tableView.beginUpdates() //still crash no matter the line exists or not 
tableView.deleteRows(at: [indexPath], with: .left) //delete cell view 
tableView.endUpdates() 

yılında yeni bir özelliktir.

*** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'UITableView internal inconsistency: the _swipedIndexPath cannot be nil if the swipe to delete row is being deleted in _updateRowsAtIndexPaths:withUpdateAction:rowAnimation:usingPresentationValues:' 

Last Exception Backtrace: 
0 CoreFoundation      0x000000018710fd50 <redacted> + 148 
1 libobjc.A.dylib      0x0000000186624528 objc_exception_throw + 56 
2 CoreFoundation      0x000000018710fc0c <redacted> + 0 
3 Foundation       0x0000000187a9bb44 <redacted> + 112 
4 UIKit        0x00000001907c52b8 <redacted> + 648 
5 UIKit        0x00000001906819e4 <redacted> + 140 
...... 
+0

Kilit günlüğünüz var mı? Ayrıca, bunun iOS 11 hatası olduğunu nereden biliyorsunuz? Bu kodu önceki versiyonda mı kullanıyorsunuz? –

+0

Tüm delege uygulamanızı sağlayabilir misiniz? – iGenio

+0

iOS 11.2 düzeltmeleri bu soruna benziyor – PatrickDotStar

cevap

3

Kodunuz Tamam görünüyor, ancak Xcode 9'da hücrelerin silinmesiyle ilgili bir hata oluştu. Kodunuzu Xcode 8'de denerseniz, muhtemelen işe yarayacaktır. Daha fazla bilgi için this numaralı telefonu arayınız.

+0

Çok teşekkürler. Ancak projemizin bazı iOS11 özelliklerine ihtiyacı var. –

+0

@VictorChoy, Elmalar bu sorunu giderene kadar beklemeniz gerekecek. Bu arada, Xcode 9'un en son sürümünü indirdiğinizden ve sorunun yakında çözüleceğinden emin olabilirsiniz. –

+0

Bu sadece bir cevaptır, dolayısıyla bir yorumdur. –

0

Örneğimi kullanmaya çalışıyorum.

class ViewController: UIViewController { 

    @IBOutlet weak var tableView: UITableView! 

    var data = ["Byba", "Boba", "Gent", "Xpa", "zc", "123", "swipe", "gen", "sw", "xcas", "kjs", "908"] 

    override func viewDidLoad() { 
     super.viewDidLoad() 
     // Do any additional setup after loading the view, typically from a nib. 
    } 

    override func didReceiveMemoryWarning() { 
     super.didReceiveMemoryWarning() 
     // Dispose of any resources that can be recreated. 
    } 


} 

// MARK: - UITableViewDelegate 
extension ViewController: UITableViewDelegate { 

    func tableView(_ tableView: UITableView, titleForDeleteConfirmationButtonForRowAt indexPath: IndexPath) -> String? { 
     return "delete" 
    } 

    func tableView(_ tableView: UITableView, canEditRowAt indexPath: IndexPath) -> Bool { 
     return true 
    } 

    func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCellEditingStyle, forRowAt indexPath: IndexPath) { 
     if editingStyle == .delete { 
      tableView.beginUpdates() 
      data.remove(at: indexPath.row) 
      tableView.deleteRows(at: [indexPath], with: .left) 
      tableView.endUpdates() 
     } 
    } 
} 

// MARK: - UITableViewDataSource 
extension ViewController: UITableViewDataSource { 

    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 
     return data.count 
    } 

    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 
     let cell = UITableViewCell() 
     let item = data[indexPath.row] 

     cell.textLabel?.text = item 

     return cell 
    } 
} 
İlgili konular