Di aplikasi iOS5 saya, saya memiliki NSObject
States
kelas, dan mencoba memasukkannya:
states = [states init];
di sini adalah init
metode di States
:
- (id) init
{
if ((self = [super init]))
{
pickedGlasses = 0;
}
return self;
}
Tapi ada kesalahan di telepon states = [states init];
jenis penerima "Serikat" misalnya pesan adalah deklarasi maju
Apa artinya? Apa yang saya lakukan salah?
iphone
ios
objective-c
forward-declaration
Penjaga
sumber
sumber
Jawaban:
Itu pada dasarnya berarti bahwa Anda perlu mengimpor file .h yang berisi deklarasi Negara.
Namun, ada banyak hal lain yang salah dengan kode Anda.
+alloc
membuatnya. Itu tidak akan berhasil[super init]
di-init
.@class
di header, tetapi tidak pernah mengimpor kelas.sumber
.h
file karena masalah referensi melingkar.NSObject
.FWIW, saya mendapatkan kesalahan ini ketika saya mengimplementasikan data inti ke proyek yang ada. Ternyata saya lupa menautkan CoreData.h ke proyek saya. Saya telah menambahkan kerangka kerja CoreData ke proyek saya tetapi menyelesaikan masalah dengan menautkan ke kerangka kerja di header pra-kompilasi saya seperti yang dilakukan templat Apple:
sumber
Saya mendapat pesan semacam ini ketika saya memiliki dua file yang saling bergantung. Yang rumit di sini adalah Anda akan mendapatkan referensi melingkar jika Anda hanya mencoba untuk saling mengimpor (kelas A impor kelas B, kelas B mengimpor kelas A) dari file header mereka. Jadi yang akan Anda lakukan adalah meletakkan
@class A
deklarasi forward ( ) di salah satu file header kelas (kelas B). Namun, ketika mencoba menggunakan ivar kelas A dalam implementasi kelas B, kesalahan ini muncul, hanya menambahkan#import "A.h"
file .m dari kelas B yang memperbaiki masalah bagi saya.sumber
Saya sedang mencoba untuk menggunakan
@class "Myclass.h"
.Ketika saya mengubahnya
#import "Myclass.h"
, itu bekerja dengan baik.sumber
@class "Myclass.h"
benar-benar salah.@class Myclass
harus digunakan dalam file header di mana kelas tidak dapat diimpor (karena referensi melingkar, seperti yang akan terjadi dengan kelas Swift-didefinisikan dalam Objective-C) tetapi#import "Myclass.h"
harus digunakan jika dapat diimpor.Anda menggunakan
di mana Anda harus menggunakannya
Metode init Anda seharusnya seperti ini
Sekarang akhirnya ketika Anda akan membuat objek untuk kelas States Anda harus melakukannya seperti ini.
Saya tidak mengatakan ini adalah cara terbaik untuk melakukan ini. Tetapi mungkin membantu Anda memahami penggunaan dasar dari menginisialisasi objek.
sumber
Jika Anda mendapatkan kesalahan ini saat mencoba menggunakan kelas Swift atau metode di Objective C : Anda lupa salah satu dari 2 langkah yang didefinisikan Apple pada diagram ini:
Contoh:
Kesalahan muncul di
Test.m
file Anda :Langkah 1: cek yang
Test.h
memilikiLangkah 2: cari
*-Swift.h
nama file di Build Settings (cari Objecter-C Generated Interface Header Name ). Namanya akan sepertiMyModule-Swift.h
Langkah 3: periksa apakah
Test.m
mengimpor header di atassumber
Periksa apakah Anda mengimpor file header dari kelas yang melempar kesalahan ini.
sumber
Pastikan prototipe untuk metode unit Anda ada di file .h.
Karena Anda memanggil metode yang lebih tinggi dalam file daripada mendefinisikannya, Anda mendapatkan pesan ini. Atau, Anda dapat mengatur ulang metode Anda, sehingga penelepon lebih rendah dalam file daripada metode yang mereka panggil.
sumber
Ada dua pesan kesalahan terkait yang mungkin memberi tahu Anda ada sesuatu yang salah dengan deklarasi dan / atau impor.
Yang pertama adalah yang Anda maksud, yang dapat dihasilkan dengan TIDAK memasukkan #import di file .m (atau .pch) Anda saat mendeklarasikan kelas @ di file .h Anda.
Yang kedua Anda mungkin melihat, jika Anda memiliki metode di kelas States Anda seperti:
setelah menambahkan #import adalah ini:
Jika Anda melihat ini, Anda perlu memeriksa dan melihat apakah Anda menyatakan metode "logout" Anda (dalam hal ini) dalam file .h dari kelas yang Anda impor atau peneruskan.
Jadi dalam kasus Anda, Anda memerlukan:
di kelas States Anda .h untuk membuat satu atau kedua kesalahan terkait ini menghilang.
sumber