Baru-baru ini, saya tiba-tiba mendapati bahawa aplikasi iOS yang saya tulis sebelum ini kadang-kadang ranap apabila dimuat semula.
Saya menyemak kod dan menemui pepijat. Langkah-langkah yang membawa kepada pepijat adalah seperti berikut:
Pengguna menarik paparan meja ke bawah untuk memuat semula.
Kosongkan NSArray yang menyimpan data.
Dapatkan data rangkaian dan kemudian isikannya ke dalam NSArray.
Dalam keadaan biasa tiada masalah untuk melakukan ini.
Walau bagaimanapun, jika pengguna menyeret paparan jadual semasa langkah 2 dan 3, ia akan ranap serta-merta.
Menganalisis sebabnya. Apabila saya mengosongkan NSArray, tableView tidak akan memanggil numberOfItemsInSection secara automatik untuk mendapatkan bilangan data terkini Jika ia ditarik ke bawah pada masa ini, tableview akan memanggil cellForItemAtIndexPath untuk mendapatkan sel baharu ialah 0, capaian cellForItemAtIndexPath Data akan berada di luar sempadan tatasusunan.
Jadi saya ingin bercakap tentang langkah kedua yang dimasukkan di tengah-tengah langkah ketiga, iaitu, selepas mendapatkan data jauh, kosongkan NSArray, kemudian gantikannya dengan data rangkaian baharu, dan kemudian laraskan muat semula data semula.
Tetapi ini masih mempunyai pepijat asal Sebelum memanggil reloadData, bilangan NSArray adalah berbeza daripada numberOfItemsInSection yang diperolehi oleh tableView. Cuma selang masa lebih pendek berbanding sebelum ini.
Saya ingin bertanya kepada semua pakar bagaimana anda mengemas kini data dalam tableView. Bagaimana untuk mencapai keselamatan 100%.
Selagi data berubah, anda harus memuat semula tableView
Walaupun anda ingin mengosongkan kandungan, anda boleh memuat semulanya apabila anda selesai