Saya membuat tombol dan menambahkan tindakan untuk itu, tetapi segera setelah dipanggil, saya mendapatkan kesalahan ini:
-[NSCFDictionary numberButtonClick:]: unrecognized selector sent to instance
0x3d03ac0 2010-03-16 22:23:58.811
Money[8056:207] *** Terminating app
due to uncaught exception
'NSInvalidArgumentException', reason:'*** -[NSCFDictionary numberButtonClick:]: unrecognized selector sent to instance 0x3d03ac0'
Ini kode saya:
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil {
if (self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]) {
UIButton *numberButton = [UIButton buttonWithType:UIButtonTypeCustom];
numberButton.frame = CGRectMake(10, 435, 46, 38);
[numberButton setImage:[UIImage imageNamed:@"one.png"] forState:UIControlStateNormal];
[numberButton addTarget:self action:@selector(numberButtonClick:) forControlEvents:UIControlEventTouchUpInside];
[self.view addSubview: numberButton];
}
return self;
}
-(IBAction)numberButtonClick:(id)sender{
NSLog(@"---");
}
objective-c
selector
unrecognized-selector
Halo Dunia
sumber
sumber
Jawaban:
Sepertinya Anda tidak mengelola memori view controller dengan benar dan sedang tidak dialokasikan pada beberapa titik - yang menyebabkan
numberButtonClicked:
metode dikirim ke objek lain yang sekarang menempati memori yang sebelumnya ditempati oleh controller tampilan ...Pastikan Anda mempertahankan / melepaskan pengontrol tampilan dengan benar.
sumber
-[NSWindow end]: unrecognized selector sent to instance 0x100523e80
dan meskipun saya menyadari kesamaan dengan OP, dan bahkan mungkin penyebab masalah dari jawaban Anda, implementasi perbaikan tidak segera jelasBagi mereka yang datang ke sini melalui Google seperti yang saya lakukan, yang mungkin lebih berkaitan dengan Xcode 4.2 + / iOS 5+ lebih, apa dengan ARC. Saya memiliki kesalahan yang sama " pemilih yang tidak dikenal dikirim ke instance ". Dalam kasus saya, saya memiliki tindakan target UIButton diatur untuk lulus sendiri sebagai parameter pengirim, tetapi kemudian menyadari bahwa saya tidak membutuhkannya dan menghapusnya dalam kode. Jadi, sesuatu seperti:
Diubah menjadi:
Mengklik kanan UIButton yang dipermasalahkan menunjukkan bahwa acara Touch Up Inside dikaitkan dengan tombol pengendali tampilanTekan: metode. Menghapus ini dan menugaskannya kembali ke metode yang dimodifikasi berhasil memperlakukan.
sumber
Ini adalah jawaban Google teratas untuk masalah ini, tetapi saya memiliki penyebab / hasil yang berbeda - saya pikir saya akan menambahkan dua sen saya seandainya orang lain menemukan masalah ini.
Saya memiliki masalah serupa pagi ini. Saya menemukan bahwa jika Anda mengklik kanan item UI yang memberi Anda masalah, Anda dapat melihat koneksi apa yang telah dibuat. Dalam kasus saya, saya memiliki tombol yang terhubung ke dua tindakan. Saya menghapus tindakan dari menu klik kanan dan mengembalikannya dan masalah saya diperbaiki.
Jadi, pastikan tindakan Anda terhubung dengan benar.
sumber
OK, saya harus chip di sini. OP secara dinamis menciptakan tombol . Saya memiliki masalah yang sama dan jawabannya (setelah jam berburu) sangat sederhana sehingga membuat saya sakit.
Ketika menggunakan:
Jika Anda menempatkan tanda titik dua di ujung string - itu akan melewati pengirim. Jika Anda tidak meletakkan titik dua di bagian akhir string, maka tidak akan, dan penerima akan mendapatkan kesalahan jika mengharapkannya. Sangat mudah untuk kehilangan titik dua jika Anda secara dinamis membuat nama acara.
Opsi kode penerima terlihat seperti ini:
Seperti biasa, selalu merupakan jawaban yang jelas terlewatkan.
sumber
Dalam kasus saya, fungsinya tidak mengharapkan argumen tetapi tombol telah dikonfigurasi untuk mengirim satu yang menyebabkan kesalahan. Untuk memperbaiki ini saya harus me-rewire event handler.
Inilah fungsi saya:
Perhatikan itu tidak mengandung argumen.
Ini adalah gambar konfigurasi tombol saya (klik kanan pada tombol untuk melihatnya):
Perhatikan ada 3 penangan acara.
Untuk memperbaikinya, saya harus menghapus masing-masing item acara karena salah satunya mengirim referensi ke dirinya sendiri ke fungsi EnterPressed. Untuk menghapus item-item ini, saya mengklik ikon x kecil di sebelah nama setiap item sampai tidak ada item yang ditampilkan.
Selanjutnya saya harus menghubungkan kembali tombol ke acara tersebut. Untuk melakukan ini, tahan tombol Control dan kemudian tarik garis dari tombol ke tindakan. Itu harus mengatakan "Hubungkan Aksi". Catatan: Saya harus me-restart XCode agar ini berfungsi karena beberapa alasan; jika tidak, biarkan saya menyisipkan tindakan (alias membuat tindakan baru) di atas atau di bawah fungsi.
Anda sekarang harus memiliki penangan event tunggal ditransfer ke acara tombol yang tidak melewati argumen:
Jawaban ini memuji jawaban oleh @Leonard Challis yang harus Anda baca juga.
sumber
Ini juga bisa terjadi jika Anda tidak mengatur "Kelas" dari tampilan dalam pembangun antarmuka.
sumber
Dalam kasus saya, saya menggunakan NSNotificationCenter dan berusaha menggunakan pemilih yang tidak mengambil argumen, tetapi menambahkan titik dua. Menghapus usus besar memperbaiki masalah.
Saat menggunakan nama pemilih, jangan gunakan tanda titik dua jika tidak ada argumen. Jika ada satu argumen, gunakan satu tanda titik dua. Jika ada lebih dari satu argumen, Anda harus menamainya bersama dengan tanda titik dua untuk setiap argumen.
Lihat jawaban Adam Rosenfield di sini: Selektor di Objective-C?
sumber
Saya punya masalah dengan proyek Swift di mana saya membuat tombol secara dinamis. Kode masalah:
Solusinya adalah dengan menambahkan titik dua penuh ':' setelah tindakan: mis
Contoh lengkap di sini: https://developer.apple.com/library/content/samplecode/UICatalog/Listings/Swift_UIKitCatalog_DefaultToolbarViewController_swift.html
sumber
Penyebab paling jelas dari ini (termasuk untuk kelengkapan) adalah tidak tepat melemparkan pointer dan memanggil metode dari kelas yang salah.
sumber
Saya juga punya masalah yang sama.
Saya menghapus uibutton saya di storyboard saya dan membuatnya kembali .. sekarang semuanya berfungsi dengan baik.
sumber
Saya memiliki masalah yang sama, tetapi bagi saya solusinya sedikit berbeda. Dalam kasus saya, saya menggunakan Kategori untuk memperluas kelas yang ada (UIImage untuk beberapa kemampuan mengubah ukuran - lihat ini howto jika Anda tertarik) dan lupa menambahkan file * .m ke target build. Kesalahan bodoh, tetapi tidak selalu jelas ketika itu terjadi di mana mencarinya. Saya pikir ini layak untuk dibagikan ...
sumber
Ini terjadi pada saya karena secara tidak sengaja menghapus "@IBAction func ..." di dalam kode kelas UIViewcontroller saya, jadi di Storyboard dibuat Outlet Referensi, tetapi pada saat runtime ada fungsi untuk memprosesnya.
Solusinya adalah menghapus referensi Outlet di dalam inspektur properti dan kemudian membuatnya kembali dengan menyeret kunci perintah ke kode kelas.
Semoga ini bisa membantu!
sumber
Saya pikir Anda harus menggunakan void, bukan IBAction pada tipe return. karena Anda mendefinisikan tombol secara terprogram.
sumber
Solusi lain yang mungkin: Tambahkan '-ObjC' ke argumen tautan Anda.
Penjelasan lengkap ada di sini: Kategori Objective-C di perpustakaan statis
Saya pikir intinya adalah: jika kategori didefinisikan di perpustakaan yang Anda tautkan secara statis, tautan tidak cukup pintar untuk menautkan dalam metode kategori. Bendera di atas membuat tautan tautan di semua kelas dan kategori objektif C, bukan hanya yang menurutnya perlu didasarkan pada analisis sumber Anda. (Jangan ragu untuk memperbaiki atau memperbaiki jawaban itu. Saya tahu bahasa yang ditautkan, jadi saya hanya nuri di sini).
sumber
Saya memiliki kesalahan yang sama dan saya menemukan yang berikut:
Ketika Anda menggunakan kode
Anda mungkin berpikir sedang mencari pemilih:
Tapi sebenarnya mencari pemilih:
Pemilih itu tidak ada, jadi Anda mendapatkan crash.
Anda dapat mengubah pemilih untuk menerima (id) pengirim untuk menyelesaikan kesalahan.
Tetapi bagaimana jika Anda memiliki fungsi lain yang memanggil fungsi refresh tanpa menyediakan pengirim? Anda memerlukan satu fungsi yang berfungsi untuk keduanya. Solusi mudah adalah dengan menambahkan fungsi lain:
Dan kemudian ubah kode pulldown refresh untuk memanggil pemilih itu sebagai gantinya:
Saya juga sedang melakukan kursus Stanford iOS pada Mac lama yang tidak dapat ditingkatkan ke versi terbaru Mac OSX. Jadi saya masih membangun untuk iOS 6.1, dan ini memecahkan masalah bagi saya.
sumber
Pada kasus saya, saya memecahkan masalah setelah 2 jam:
Pengirim (item tabBar) tidak memiliki Outlet Referensi . Jadi itu tidak menunjuk ke mana-mana.
Juste membuat outlet referensi yang sesuai dengan fungsi Anda.
Semoga ini bisa membantu kalian.
sumber
IBAction
ke Swift. Jadi itu mengeluh bahwa ia ingin memanggil fungsi itu, tetapi tidak dapat ditemukan.Saat ini saya sedang belajar pengembangan iOS dan membaca buku "Beginning iOS6 Development" oleh aPress. Saya mendapatkan kesalahan yang sama di Bab 10: Storyboards.
Butuh waktu dua hari untuk mengetahuinya tetapi ternyata saya tidak sengaja mengatur tag sel TableView menjadi 1 padahal seharusnya tidak. Bagi siapa pun yang melakukan buku ini dan menerima kesalahan serupa, saya harap ini membantu.
Saya sangat berharap kesalahan di masa depan dalam kode saya lebih mudah ditemukan! ha ha ha. Kesalahan debug tidak melakukan apa pun untuk mendorong saya ke arah yang benar untuk mencari tahu (atau setidaknya saya terlalu baru untuk memahami debugger, lol).
sumber
Dalam kasus saya, saya menggunakan UIWebView dan saya melewatkan NSString pada parameter kedua, bukan NSURL. Jadi saya menduga bahwa tipe kelas yang salah diteruskan ke suatu fungsi dapat menyebabkan kesalahan ini.
sumber
..Dan Sekarang milikku
Saya memiliki tombol yang terhubung ke metode yang mengakses parameter tombol lain dan itu bekerja dengan baik, tetapi segera setelah saya mencoba melakukan sesuatu dengan tombol itu sendiri, saya mendapat crash. Saat mengkompilasi, tidak ada kesalahan yang ditampilkan .. Solusi?
Saya gagal menautkan tombol ke pemilik file. Jadi kalau ada orang di sini yang sebodoh saya, coba ini :)
sumber
Namun solusi / kasus lain yang sedikit berbeda.
Saya menggunakan Xamarin dan MvvmCross dan saya mencoba untuk mengikat UIButton ke ViewModel. Saya memiliki kabel UIButton ke Outlet dan TouchUpInside.
Saat Binding saya hanya menggunakan Outlet:
Yang harus saya lakukan adalah menghapus koneksi aksi (TouchUpInside) di XCode dan itu menyelesaikannya.
PS Saya kira ini ada di pangkalannya semua yang terkait dengan jawaban sebelumnya dan untuk @Chris Kaminski pada khususnya, tapi saya harap ini membantu seseorang ...
Bersulang.
sumber
Saya memiliki masalah yang sama. Masalahnya bagi saya adalah bahwa satu tombol memiliki dua metode Aksi. Apa yang saya lakukan adalah membuat metode tindakan pertama untuk tombol saya dan kemudian menghapusnya di view controller, tetapi lupa untuk memutuskan koneksi di storyboard utama di inspektur koneksi. Jadi ketika saya menambahkan metode tindakan kedua, sekarang ada dua metode tindakan untuk satu tombol, yang menyebabkan kesalahan.
sumber
Bagi saya, itu adalah koneksi sisa yang dibuat di interfacebuilder dan ctrl-dragging. Nama koneksi yang terputus ada di log kesalahan
Saya memiliki tindakan yang ditautkan ke tombol. Menekan tombol membuat aplikasi mogok karena Outlet tidak lagi ada dalam kode saya. Mencari nama di log menuntun saya ke sana di storyboard. Dihapus, dan kecelakaan itu hilang!
sumber
Saya membalas ke Leonard Challis, karena saya juga mengambil kelas Stanford iOS C193P, seperti juga pengguna "oli206"
"Mengakhiri aplikasi karena pengecualian 'NSInvalidArgumentException' tanpa alasan, alasan:"
Masalahnya adalah saya memiliki tombol "Enter" pada kalkulator yang terhubung dua kali, dan seorang teman menunjukkan bahwa melakukan pemeriksaan tombol di Storyboard menunjukkan bahwa 2 entri berada pada atribut "Touch Up Inside" ketika saya mengklik kanan pada tombol "Enter". Menghapus salah satu dari dua "Sentuh Di Dalam" "Acara Terkirim" memecahkan masalah.
Ini menunjukkan bahwa masalahnya dipicu (untuk kelas video C193P di Walkthrough Calculator on Assignment 1) sebagai 2 peristiwa yang dikirim, salah satunya menyebabkan pengecualian.
sumber
Itu bisa terjadi ketika Anda tidak menetapkan ViewController ke ViewControllerScene di InterfaceBuilder. Jadi ViewController.m tidak terhubung ke adegan apa pun.
sumber
Termasuk bagian saya. Saya terjebak pada ini untuk sementara waktu, sampai saya menyadari saya telah membuat proyek dengan ARC (penghitungan penghitungan otomatis) dinonaktifkan. Set cepat ke YA pada opsi itu menyelesaikan masalah saya.
sumber
Penyebab lain yang benar-benar konyol dari ini adalah memiliki pemilih yang didefinisikan di antarmuka (.h) tetapi tidak dalam implementasi (.m) (pe typo)
sumber
Alasan / solusi lain untuk ditambahkan ke daftar. Yang ini disebabkan oleh iOS6.0 (dan / atau pemrograman buruk). Dalam versi yang lebih lama, pemilih akan cocok jika jenis parameter cocok, tetapi di iOS 6.0 saya mengalami crash pada kode yang sebelumnya berfungsi di mana nama parameter tidak benar.
Saya sedang melakukan sesuatu seperti
tetapi dalam definisi (keduanya. h dan. m) saya miliki
Ini bekerja dengan baik di iOS5 tetapi tidak pada 6, bahkan bangunan yang sama persis dikerahkan ke perangkat yang berbeda.
Saya tidak mengerti mengapa kompiler tidak dapat memberi tahu saya hal ini - masalah diselesaikan.
sumber
Ini juga mungkin terjadi ketika Anda ingin mengatur properti dari ControllerA ke properti publik di dalam kelas ControllerB kustom dan Anda belum menetapkan "Kelas Kustom" di dalam inspektur identitas di storyboard.
sumber
Masalah dan solusi saya berbeda dan saya pikir saya harus mempostingnya di sini sehingga pembaca yang akan datang dapat menyelamatkan kepala mereka dari terbentur ke dinding.
Saya mengalokasikan xib yang berbeda untuk UIVIewController yang sama dan bahkan setelah mencari kemana-mana saya tidak dapat menemukan cara untuk memperbaikinya. Kemudian saya memeriksa AppDelegate saya di mana saya menelepon
initWithNibName
dan dapat melihat bahwa saat menyalin kode, saya mengubah nama xib, tetapi lupa mengubahUIViewController
kelas. Jadi, jika tidak ada solusi yang cocok untuk Anda, periksainitWithNibName
metode Anda .sumber
Terjadi pada saya karena argumen kendala yang saling bertentangan.
sumber