7

かなり基本的なことですが、問題がどこにあるかをトラブルシューティングできません。私のプロジェクトでは、次の 2 つのメソッドを持つ「TheFeedStore」という名前のクラスがあります。

- (BOOL)hasItemBeenRead:(RSSItem *)item
{
   ............
}

- (void)markItemAsRead:(RSSItem *)item
{
  .........
}

私は次のクラスメソッドを使用しているので、他のクラスはそれを使用してこれらのメソッドにアクセスできます:

+ (TheFeedStore *) sharedStore
{
    static TheFeedStore *feedStore = nil;

    if (!feedStore) {
        feedStore = [[TheFeedStore alloc] init];
    }
    return feedStore;
}

私の別のクラスの1つで、次のように書くことで上記のメソッドに簡単にアクセスできます

if ([[TheFeedStore sharedStore] hasItemBeenRead:item]) 

また

[[TheFeedStore sharedStore] markItemAsRead:entry];

しかし、別のクラスで同様の方法でこれらのメソッドにアクセスしようとすると、「'TheFeedStore' の目に見える @interface がセレクター 'hasItemBeenRead を宣言していません:」というエラーが表示されます。

1) TheFeedStore クラスのこれらのメソッドにアクセスしているクラスに TheFeedStore.h ファイルをインポートしました。

2) 10回ほどチェックしましたが、タイプミスはありません。

3) アクセスしているメソッドは、TheFeedStore.h のヘッダー ファイルでも宣言されています。

更新:確認するために、TheFeedStore.h で別のテスト メソッドを宣言しました。同じ結果です。1 つのクラスは新しく作成されたメソッドにアクセスできますが、残りの 3 つのクラスはアクセスできません。

更新:この問題のトラブルシューティングのためだけに、TheFeedStore.h にさらにメソッドを作成しようとしました。新しいメソッドは、他のクラスからもアクセスできません。しかし、これらの新しいメソッドの戻り値の型が私のプロジェクトの別のモデル クラスである (RSSChannel*) である場合、アクセス可能になります。戻り値の型が (void) や (BOOL) などのクラス以外の場合、アクセスできません。これが私のTheFeedStore.h https://gist.github.com/jessicamoore112/5558473です

4

5 に答える 5

7

ヘッダー ファイルで #import の代わりに @class を使用しているとのことですが、アクセスしようとしているメソッドはヘッダー ファイルで宣言されており、タイプミスはありません。

そのような場合、通常、この問題を指摘する機関はありませんが、私はそのような問題に何度も直面しているので、とにかくそれを行うつもりです. おそらく、各機能で作業するためにプロジェクトのコピーを多数作成し、作業中のプロジェクトを維持しているでしょう。

これを行うと、Xcode がまだいくつかのファイルの古いコピーを使用していることがあります。これは、アクセスしようとしているメソッドが宣言されていない場合でも、TheFeedStore.h の古いコピーを使用していることを意味します。

この問題を解決する方法は非常に簡単です。メソッドにアクセスしようとしているファイルと、これらのメソッドが宣言されているファイルに移動します。

右側の [ユーティリティ] セクションで、[ID とタイプ] 領域の下の場所とフル パスを確認します。

最初にプロジェクトの名前を確認してください。作業中のプロジェクト名と異なる場合は、Xcode がまだプロジェクトの以前のリビジョンからファイルの古いコピーをプルしていることを意味します。私の場合、プロジェクト名が 13SampleMoreRequests である青い矢印を参照してください。

ユーティリティ

この名前がプロジェクト名と同じ場合、私の答えは問題を解決しません。異なる場合は、赤い矢印で示されている記号を使用して新しい場所を参照して、ファイルの新しいコピーを使用する必要があります。

新しいファイルを参照して使用すると、問題は解決され、メソッドにアクセスできるようになります。それでもできない場合は、これらのファイルをコピーし、プロジェクトから削除してから再度追加すると、この問題に直面することはありません。

お役に立てれば!

于 2013-05-13T14:36:11.370 に答える
2

A.hインポートB.h中のインポートなどの循環インポートB.hA.h、最も一般的な問題です。

C では、循環インポートは機能せず、インポートの 1 つが黙って無視されます。循環インポートを行っていないことを確認してください。もしそうなら、それを解決してください (例えば、前方宣言を使用して)。

前処理された出力を生成すると、インポートの問題も簡単に調べることができます (Xcode メニューの 1 つで見つけることができます)。

于 2013-05-11T00:22:05.710 に答える
1

ばかげているように聞こえるかもしれませんが、私は時々似たようなケースがあり、単純にxcodeを終了して開始するだけでうまくいくことがあります。また、プロジェクトのクリーニングが役立つ場合もあります。私はあなたのシングルトンコードに非常に似ていて、うまく動作します。

于 2013-05-08T03:37:05.600 に答える
1

私の場合、非常に奇妙なパスエントリがいくつかありました

  • フレームワーク検索パス
  • ライブラリ検索パス

(ターゲット -> YOUR_APP_NAME -> 「検索パス」セクションのビルド設定)

それらを削除したところ、エラー メッセージは表示されなくなりました。

于 2014-11-30T04:30:40.020 に答える