7

私のクラスがスーパークラスから継承するコードがいくつかあり、今まですべて正常に動作しています。スーパークラス変数のいずれかを使用しようとすると、それらが宣言されていないというエラーが表示されます (この関数で最初に使用されます)。それは私のサブクラスの 1 つでのみ発生しており、他のサブクラスとまったく同じように見えます。私が知っておくべき明らかなことがあるかどうか疑問に思っています(Objective-Cにはまったく新しいものです)。基本的なコードは次のようなものです -

@interface mySuperClass : UIViewController {

BOOL myVar;

}

それで -

@interface mySubClass : mySuperClass {

}

@implementation mySubClass {

-(void)someMethod {

    myVar = YES; // error here

}

@end

助けていただければ幸いです - さらに情報が必要な場合は、お知らせください。ありがとう。

4

4 に答える 4

4

スーパークラスのプロパティにアクセスできなくなったという非常によく似た奇妙なエラーを乗り越えました.xcodeは、「(*)未宣言(この関数で最初に使用)」というコンパイラエラーを出しました。しかし、過去には何の問題もありませんでした...

問題は、.m ファイルの先頭に入力ミスがあり、xcode コンパイラの出力が誤解を招くことでした。具体的には、合成ステートメントまたはヘッダーファイルの対応する変数のいずれかで、プロパティのスペルが間違っている @synthesize ステートメントがありました。

@synthesize ステートメントまたはその他の宣言がある場合は、細かい櫛でそれらを調べるか (つまり、最近どの行を導入したか)、それらのブロックをコメントアウトして、再度コンパイルして原因を絞り込めるかどうかを確認してください。

この場合も、コンパイラ エラーは非常に誤解を招くものであり、デバッグは非常に困難でした。ただし、99.9% の確率でエラーは自分のものでした。:)

于 2011-06-10T19:12:04.363 に答える
2

貼り付けたコードに問題はありません。私の最初の推測は、mySuperClass .h ファイルを適切にインポートしていないということです。つまり、あなたが行方不明です

#import "mySuperClass.h"    //or #include

mySubClass.h または mySubClass.m 内

于 2011-05-12T11:15:25.953 に答える
1

私は同じ問題に遭遇し、時間を無駄にした後、プロジェクトで最終的にそれを解決しました:

ソースをリファクタリングしてメンバーを削除しましたが、.hファイルの@property定義を削除するのを忘れました。これは、私がスーパーメンバーを使用しているときに、あらゆる場所でエラーにつながります。ところで:スーパーからの方法は問題ありません。

したがって、プロパティの定義を確認してください。彼の解決策についてポスト8のScrewtapeに感謝します:-)

編集:おっと、クリスの答えはタイプミスと削除を除いてかなり似ています。

于 2011-06-21T14:24:43.737 に答える
1

私は何週間も同じ問題を抱えています

iOS デバイスへのコンパイル時の "Variable Undeclared" エラー (シミュレーターの場合ではない)

LLVM GCC 4.2私が見つけた 1 つの解決策は、コンパイラをデフォルトからLLVM Compiler 2.0(または `Apple LLVM Compiler 2.1)に単純に変更することです。コンパイラのバグのようですが、単なる推測です。

GCC コンパイラをまったく使用する必要がない場合は、これを変更することで問題を簡単に解決できます。

于 2011-08-04T12:57:43.090 に答える