DataManagerというシングルトンクラスがあります。このクラスは、plistファイルのロードと保存を処理するために他のいくつかのクラスによって使用されます。
DataManagerがスクリーンショットとplistファイルを保存する機能を追加しています。これには、スクリーンショットを撮りたいビューをロードする必要があります。ロードしているビューは、DataManagerをインポートするコントローラーからのものです。
明らかにこれは循環依存であるため、私は以下を使用しました。
@class GardenView;
ただし、これにより次のエラーが発生しました。
- クラスメッセージのレシーバー「GardenView」は前方宣言です
- インスタンスメッセージの受信者タイプ「GardenView」は転送です
- 宣言プロパティ'bounds'がフォワードクラスで見つかりません
- オブジェクト'GardenView'プロパティ'layer'がフォワードクラスオブジェクト'GardenView'に見つかりません
これは、UIViewスーパークラスから継承されたプロパティを見つけることができないようです。これはフォワードクラス宣言にも当てはまりますか?
@classの代わりに標準の#importを使用すると、次のようになります。
- 解析の問題:予想されるタイプ
Plantを参照するGardenViewのメソッド(私は問題なくインポートしています):
- (void) addPlantToView: (Plant*) plant;
- (void) addPlantToGarden: (Plant*) plant;
- (void) addPlantToViewAndGarden: (Plant*) plant;
PlantクラスはDataManagerをインポートしますが、@ classに変更すると、次のようになります。
- セレクター'sharedDataManager'の既知のクラスメソッドがありません
この問題の解決策は何ですか?クラスメソッドはヘッダーファイル(+ sharedDataManager)にあります。私は完全に間違ったことをしていますか?