かなり基本的なことですが、問題がどこにあるかをトラブルシューティングできません。私のプロジェクトでは、次の 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です