Jadi saya membuat rss reader untuk sekolah saya dan menyelesaikan kode. Saya menjalankan tes dan itu memberi saya kesalahan itu. Berikut adalah kode yang dimaksud:
- (UITableViewCell *)tableView:(UITableView *)tableView
cellForRowAtIndexPath:(NSIndexPath *)indexPath {
static NSString *CellIdentifier = @"Cell";
UITableViewCell *cell =
[tableView dequeueReusableCellWithIdentifier:CellIdentifier
forIndexPath:indexPath];
if (cell == nil) {
cell =
[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle
reuseIdentifier:CellIdentifier];
}
inilah kesalahan dalam output:
2012-10-04 20: 13: 05.356 Pembaca [4390: c07] * Kegagalan pernyataan dalam - [UITableView dequeueReusableCellWithIdentifier: forIndexPath:], /SourceCache/UIKit_Sim/UIKit-2372/UITableView.m:4460 2012-10-04 20: 10-10 13: 05.357 Pembaca [4390: c07] * Mengakhiri aplikasi karena pengecualian tanpa tertangkap 'NSInternalInconsistencyException', alasan: 'tidak dapat membuat sel dengan pengenal Sel - harus mendaftarkan nib atau kelas untuk pengidentifikasi atau menyambungkan sel prototipe dalam storyboard ' * Pertama tumpukan lemparan panggilan: (0x1c91012 0x10cee7e 0x1c90e78 0xb64f35 0xc7d14 0x39ff 0xd0f4b 0xd101f 0xb980b 0xca19b 0x6692d 0x10e26b0 0x228dfc0 0x228233c 0x228deaf 0x1058cd 0x4e1a6 0x4ccbf 0x4cbd9 0x4be34 0x4bc6e 0x4ca29 0x4f922 0xf9fec 0x46bc4 0x47311 0x2cf3 0x137b7 0x13da7 0x14fab 0x26315 0x2724b 0x18cf8 0x1becdf9 0x1becad0 0x1c06bf5 0x1c06962 0x1c37bb6 0x1c36f44 0x1c36e1b 0x147da 0x1665c 0x2a02 0x2935 ) libc ++ abi.dylib: terminate disebut throwing exception
dan inilah kode yang ditampilkan di layar kesalahan:
int main(int argc, char *argv[])
{
@autoreleasepool {
return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
}
}
tolong bantu!
sumber
Jawaban:
Anda menggunakan
dequeueReusableCellWithIdentifier:forIndexPath:
metode ini. The dokumentasi untuk metode yang mengatakan ini:Anda tidak mendaftarkan nib atau kelas untuk pengidentifikasi ulang
"Cell"
.Melihat kode Anda, Anda tampaknya mengharapkan metode dequeue untuk kembali
nil
jika tidak memiliki sel untuk memberi Anda. Anda perlu menggunakandequeueReusableCellWithIdentifier:
untuk perilaku itu:Perhatikan itu
dequeueReusableCellWithIdentifier:
dandequeueReusableCellWithIdentifier:forIndexPath:
merupakan metode yang berbeda. Lihat dokumen untuk yang pertama dan yang terakhir .Jika Anda ingin memahami mengapa Anda ingin menggunakannya
dequeueReusableCellWithIdentifier:forIndexPath:
, lihat T&J ini .sumber
dequeueReusableCellWithIdentifer:forIndexPath:
(diperkenalkan di iOS6) adalah perbaikan bagus, karena Anda tidak perlu memeriksa apakah sel adalah nihil. (JadiUITableViewController
berfungsi mirip denganUICollectionView
) Tapi ya, mengganggu bahwa perubahan ini tidak mengomentari template dan bahwa pesan pernyataan / kerusakan tidak lebih membantu.dequeueReusableCellWithIdentifier:forIndexPath:
saat saya seharusnya menggunakandequeueReusableCellWithIdentifier:
.Saya pikir kesalahan ini adalah tentang mendaftarkan nib atau kelas Anda untuk pengidentifikasi.
Sehingga Anda dapat menyimpan apa yang Anda lakukan dalam fungsi tableView: cellForRowAtIndexPath Anda dan cukup tambahkan kode di bawah ini ke dalam viewDidLoad Anda:
Ini berhasil untuk saya. Semoga ini bisa membantu.
sumber
viewDidLoad
dan pindahkan logika ini untukviewDidAppear
memperbaikinya.Meskipun pertanyaan ini cukup lama, ada kemungkinan lain: Jika Anda menggunakan Storyboard, Anda hanya perlu mengatur CellIdentifier di Storyboard.
Jadi jika CellIdentifier Anda adalah "Cell", cukup setel properti "Identifier":
Pastikan untuk membersihkan bangunan Anda setelah melakukannya. XCode terkadang memiliki beberapa masalah dengan pembaruan Storyboard
sumber
Identifier
properti. Terima kasih!saya memiliki masalah yang sama untuk diganti
terpecahkan
sumber
Masalahnya kemungkinan besar karena Anda mengkonfigurasi custom
UITableViewCell
di storyboard tetapi Anda tidak menggunakan storyboard untuk instantiate AndaUITableViewController
yang menggunakan iniUITableViewCell
. Misalnya, di MainStoryboard, Anda memilikiUITableViewController
subkelas yang dipanggilMyTableViewController
dan memiliki dinamik kustom yangUITableViewCell
disebutMyTableViewCell
dengan id pengenal "MyCell".Jika Anda membuat custom
UITableViewController
seperti ini:Itu tidak akan secara otomatis mendaftarkan tableviewcell kustom Anda untuk Anda. Anda harus mendaftarkannya secara manual.
Tetapi jika Anda menggunakan storyboard untuk instantiate
MyTableViewController
, seperti ini:Hal yang menyenangkan terjadi!
UITableViewController
akan secara otomatis mendaftarkan sel tampilan tabel kustom Anda yang Anda tetapkan dalam storyboard untuk Anda.Dalam metode delegasi Anda "cellForRowAtIndexPath", Anda bisa membuat Anda sel tampilan tabel seperti ini:
dequeueReusableCellWithIdentifier akan secara otomatis membuat sel baru untuk Anda jika tidak ada sel yang dapat digunakan kembali tersedia dalam antrian daur ulang.
Lalu kamu selesai!
sumber
instantiateViewControllerWithIdentifier
untuk init viewController saya menyelamatkan hari saya!Saya hanya akan menambahkan bahwa Xcode 4.5 menyertakan yang baru
dequeueReusableCellWithIdentifier:forIndexPath:
dalam kode templat default - suatu gotcha potensial bagi para pengembang yang mengharapkan
dequeueReusableCellWithIdentifier:
metode yang lebih lama .sumber
Di storyboard Anda, Anda harus mengatur 'Identifier' dari sel prototipe Anda menjadi sama dengan CellReuseIdentifier Anda "Sel". Maka Anda tidak akan mendapatkan pesan itu atau perlu memanggil fungsi registerClass:.
sumber
Solusi Swift 2.0:
Anda harus masuk ke Inspektur Atribut dan menambahkan nama untuk Pengidentifikasi sel Anda:
Maka Anda perlu membuat identifier Anda cocok dengan dequeue Anda seperti ini:
kalau tidak
Jika Anda bekerja dengan nib, Anda mungkin perlu mendaftarkan kelas di cellForRowAtIndexPath Anda:
Referensi Kelas UITableView dari Apples mengatakan:
Berikut kode dari kerangka kerja Apples Swift 2.0:
sumber
SwitchCell.self
datangnya?UITableViewCell.self
tampaknya berfungsi untuk saya. Mungkin tambahkan catatan dalam jawabanJika Anda menggunakan Custom Static Cells, beri komentar metode ini:
dan berikan sel pengenal di "Attributes Inspector" di storyboard.
sumber
Saya memberi Anda jawaban di Objective C dan Swift. Sebelum itu saya ingin mengatakan
Jadi kami menambahkan
registerNib:forCellReuseIdentifier: or registerClass:forCellReuseIdentifier:
dalam metode viewDidLoad kita harus mendaftarkan sel
Tujuan C
PILIHAN 1:
PILIHAN 2:
dalam kode di atas
nibWithNibName:@"CustomCell"
berikan nama nib Anda alih-alih nama nib saya CustomCellCEPAT
PILIHAN 1:
PILIHAN 2:
dalam kode di atas
nibName:"NameInput"
beri nama nib Andasumber
Bekerja dengan Swift 3.0:
sumber
Saya menghabiskan berjam-jam semalam untuk mencari tahu mengapa tabel yang saya buat secara program crash pada [myTable setDataSource: self]; Tidak apa-apa berkomentar dan memunculkan meja kosong, tetapi jatuh setiap kali saya mencoba untuk mencapai sumber data;
Saya memiliki delegasi yang diatur dalam file h: @interface myViewController: UIViewController
Saya memiliki kode sumber data dalam implementasi saya dan masih BOOM !, macet setiap waktu! TERIMA KASIH untuk "xxd" (nr 9): menambahkan bahwa baris kode menyelesaikannya untuk saya! Sebenarnya saya meluncurkan tabel dari tombol IBAction, jadi inilah kode lengkap saya:
Ngomong-ngomong: tombol harus dihubungkan dengan sebagai IBAction dan sebagai IBOutlet jika Anda ingin melabuhkan popover ke sana.
UIPopoverController * popoverController3 dideklarasikan dalam file H langsung setelah @interface antara {}
sumber
FWIW, saya mendapatkan kesalahan yang sama ketika saya lupa mengatur pengidentifikasi sel di storyboard. Jika ini adalah masalah Anda, maka di papan cerita klik sel tampilan tabel dan setel pengidentifikasi sel di editor atribut. Pastikan pengidentifikasi sel yang Anda atur di sini sama dengan
sumber
Saya memiliki masalah yang sama, mengalami kesalahan yang sama dan bagi saya itu berfungsi seperti ini:
Mungkin itu akan bermanfaat bagi orang lain.
sumber
Saya mengatur semuanya dengan benar di Storyboard dan melakukan build bersih tetapi terus mendapatkan kesalahan " harus mendaftarkan nib atau kelas untuk pengidentifikasi atau menghubungkan sel prototipe di storyboard "
Memperbaiki kesalahan tapi saya masih bingung. Saya tidak menggunakan 'sel khusus', hanya tampilan dengan tampilan tabel yang diembed. Saya telah mendeklarasikan viewcontroller sebagai delegasi dan sumber data dan memastikan pengidentifikasi sel cocok dalam file. apa yang terjadi di sini?
sumber
Ini mungkin tampak bodoh bagi sebagian orang tetapi itu membuat saya. Saya mendapatkan kesalahan ini dan masalahnya bagi saya adalah saya mencoba menggunakan sel statis tetapi kemudian secara dinamis menambahkan lebih banyak barang. Jika Anda memanggil metode ini sel Anda harus prototipe dinamis. Pilih sel di storyboard dan di bawah inspektur Atribut, hal pertama mengatakan 'Konten' dan Anda harus memilih prototipe dinamis bukan statis.
sumber
Hanya pelengkap jawaban: Mungkin ada saatnya Anda mengatur semuanya dengan benar, tetapi Anda mungkin secara tidak sengaja menambahkan beberapa UI lain di dalam Anda
.xib
, sepertiUIButton
: Hapus saja UI tambahan, itu berfungsi.sumber
Pastikan CellIdentifier == pengidentifikasi sel di storyboard, kedua nama sama. Semoga ini berhasil untuk Anda
sumber
Dalam kasus saya, kecelakaan itu terjadi ketika saya menelepon
deselectRowAtIndexPath:
Garis itu
[tableView deselectRowAtIndexPath:indexPath animated:YES];
Mengubahnya menjadi
[self.tableView deselectRowAtIndexPath:indexPath animated:YES];
TETAP MASALAH SAYA!Semoga ini bisa membantu siapa saja
sumber
Di Swift masalah ini dapat diselesaikan dengan menambahkan kode berikut di
metode.
sumber
Mengalami kesalahan ini, bc penggunaan ulang pengenal sel salah - kesalahan pemula tetapi itu terjadi: 1. Membuat PASTI penggunaan kembali idenifier sel tidak memiliki kesalahan ejaan atau huruf yang hilang. 2. Sejalan dengan itu, jangan lupa jumlah kapitalisasi. 3. Nol bukan "O" (Ohs)
sumber