Peringatan papan cerita: sel tabel prototipe harus memiliki pengenal yang dapat digunakan kembali

123

Saya mendapatkan peringatan ini dari storyboard - sel tabel prototipe harus memiliki pengenal yang dapat digunakan kembali.

Saya telah mengganti nama pengenal di inspektur atribut tetapi tampaknya tidak menghapus peringatan.

Ada saran?

K.Honda
sumber
Anda telah mengisi bidang yang salah atau Anda memiliki lebih dari satu tampilan tabel. Bisakah Anda memposting tangkapan layar inspektur atribut?
jrturton
3
Tidak apa-apa sekarang sobat. Saya telah menemukan solusi. Nilai untuk Identifier harus sama dengan ID yang digunakan kembali. :)
K.Honda
Sudahkah Anda menetapkan pengenal untuk setiap sel?
Mick MacCallum
Hai Honda! Bisakah Anda memberi tahu saya apa yang Anda lakukan karena saya mendapatkan kesalahan yang sama.
Varun Mehta
2
Saya perhatikan bahwa terkadang (saat ini menggunakan Xcode 5 Beta 5 (5B103i) terbaru) menyoroti lokasi yang salah dari kesalahan / peringatan di storyboard. Jadi jika Anda akan mengklik peringatan itu terkadang akan menunjukkan lokasi yang salah di mana peringatan serupa mungkin sudah diperbaiki. Saya menyarankan secara manual melalui salah satu tampilan tabel yang Anda miliki di papan cerita Anda dan memeriksa apakah ada sel lain dengan pengenal yang hilang. Di atas memecahkan masalah saya dengan peringatan ini. Terima kasih @ K.Honda telah mengajukan pertanyaan karena topik ini membantu saya memahami cara memperbaiki masalah.
Justas

Jawaban:

159

Untuk menutup peringatan Anda harus memberi nama untuk pengenal sel:

masukkan deskripsi gambar di sini

aleroot
sumber
14
senang saya untuk. tutup xcode - buka, lalu ubah pengenal
Idan Magled
7
Ketika peringatan tetap ada berarti bahwa di suatu tempat di StoryBoard Anda masih ada sel tanpa pengenal
saimonx
Jika Anda memiliki lebih dari 1 sel prototipe, Anda harus memberi mereka semua indetifier, jika tidak, cukup setel nomor ke satu di sel prototipe
user1700737
6
Saya harus menghapus folder Derived Data (Xcode setara dengan Windows Reboot) dan membangun kembali untuk menyingkirkan peringatan palsu ini.
Michael McGuire
Ini berhasil untuk saya: tutup Xcode, buka / Users / username / Library / Developer / Xcode / DerivedData di Finder, dan hapus semua isinya (bukan folder DerivedData itu sendiri).
dldnh
18

Cara lain adalah menyetel properti 'Prototype Cells' Tampilan Tabel ke nol di Attributes Inspector, jika Anda mendefinisikan sel menggunakan .xib secara terprogram.

Menyetel sel prototipe ke 0 di Attributes Inspector

bitsand
sumber
9

Karena storyboard sebenarnya adalah file XML, jadi trik lain adalah membuka storyboard Anda dengan editor teks apa pun (bukan Xcode!) Dan mencoba menemukan semua node tableViewCell. Misalnya tekan CMD + F , ketik <tableViewCell contentMode="scaleToFill"dan tekan Enter. Anda mungkin akan mengetahui, baris yang sama dengan yang ini:

<tableViewCell contentMode="scaleToFill" selectionStyle="blue" accessoryType="disclosureIndicator" hidesAccessoryWhenEditing="NO" indentationLevel="1" indentationWidth="0.0" reuseIdentifier="GenericCellID" id="kBr-Qn-Tki">

Harap perhatikan reuseIdentifier="GenericCellID"nilai kunci Anda. Baris yang mengaktifkan peringatan (tanpa pengenal penggunaan kembali) tidak akan memiliki nilai kunci tersebut. Lihat node di atas di editor teks Anda dan Anda akan melihat tableViewControllernode dengan nama kelas yang perlu Anda periksa di editor storyboard Xcode dan perbaiki, sesuai dengan jawaban aleroot.

Dmitry Varavkin
sumber
1
Anda sebenarnya dapat membuka storyboard Anda sebagai kode dengan Xcode dengan melakukan CTRL + klik pada file storyboard Anda Open As>>Source Code
NSTJ
4

Jika peringatan Xcode Anda masih tidak hilang bahkan setelah Anda menyetel reuseIdentifier, coba Menu "Produk -> Bersihkan". Ini membantu saya dan setelah itu, peringatan itu tidak muncul lagi.

Marcel Wassmer
sumber
2

Karena mengklik dua kali peringatan ini dapat menyebabkan sedikit pengejaran (UITableViewCell spesifik tidak dipilih), hanya ingin menambahkan bahwa sementara beberapa dari peringatan ini akan diselesaikan secara otomatis, beberapa tidak akan .

Jika Anda yakin telah menandai semua sel Anda di Storyboard, buat ulang proyek - peringatan Anda mungkin hilang (seperti milik saya).

Sitric
sumber
2

Salam mary: me-restart XCode berhasil untuk saya (tetapi mungkin itu hanya pembangunan ulang manual yang diperlukan).

Hannele
sumber
1

Saya mendapat peringatan ini untuk Xcode 7. Saya bekerja dengan Swift. Saya tidak menambahkan pengontrol navigasi untuk pengontrol tampilan awal. Ketika saya melakukannya .. Saya mendapat peringatan ini dari StoryBoard. Yang saya lakukan adalah:

  1. Ada dua segmen
    1. dari Pengontrol Navigasi ke Pengontrol tampilan Root dan
    2. dari pengontrol Root View ke pengontrol Tampilan awal Anda.
  2. Pilih segue yang menghubungkan pengontrol tampilan root ke pengontrol tampilan awal.
  3. Beri nama pengenal
  4. Pilih bagian tertulis "Prototipe" dari pengontrol -> di sana Anda akan melihat pengenal sebagai opsi.
  5. Tempelkan nama pengenal yang sama seperti yang dimasukkan sebelumnya.

Peringatannya berbunyi .. jika tidak bersihkan sdk :)

Mili
sumber
1

Pastikan Anda menyetel Reuse Identifier pada objek, bukan ID Pemulihan . Keduanya tersedia melalui storyboard, dan mudah bingung.

Di file XML storyboard, Anda ingin menyetelnya reuseIdentifier, bukan restorationIdentifier.

pkamb
sumber
0

Saya telah memperhatikan bahwa kesalahan ini terjadi ketika Anda memiliki beberapa sel prototipe (di properti tableview) dan belum memberikan semuanya menggunakan kembali pengenal.

Tjalsma
sumber
Saya telah melihat ini juga, apakah ada cara untuk memberi nama semua sel sekaligus atau adakah cara lain untuk menghapus peringatan ini?
CatsLoveJazz
1
Setiap sel Prototye membutuhkan nama uniknya sendiri. Jadi tidak ada cara untuk melakukannya secara otomatis
Vincent
0

Pengidentifikasi adalah nama yang Anda rujuk dalam file .m Anda. Jika tidak diisi, tidak mungkin untuk mereferensikan sel.

Vincent
sumber
0

Ini untuk menyetel pengenal kembali secara terprogram

-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath (NSIndexPath*)indexPath 
{
    static NSString *cellIdentifier = @"wot";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier forIndexPath:indexPath];

    if (!cell)
        cell = [[UITableViewCell alloc] initWithStyle: someStyle reuseIdentifier: cellIdentifier];

    return cell;
}
Mukesh
sumber