AppDelegateクラスが見つかりません

私は多くのクラスでAppDelegate.hをインポートしました:

#import "AppDelegate.h"

@interface LoginViewController : UIViewController
{

}

@property (nonatomic, retain) AppDelegate *app;

何とか私のloginviewcontroller.hで動作を停止しました。それは言う:

 unknown type name 'AppDelegate' [1]
 property with 'retain (or strong)' attribute must be of object type [3]

私はこのクラスを最初から作りました。このエラーで始まるクラスまたは AppDelegate を変更しませんでした。

問題なく他のクラスにインポートできます。私はクラスを再作成しようとしましたが、助けにはなりませんでした。

誰でもこの奇妙なエラーを解決する方法を知っていますか?

4
.hファイルに循環依存性がある可能性はありますか? (簡単な方法:AppDelegate.hの#import "LoginViewController.h")。もしそうなら、ここでインポートするのではなく@class AppDelegateを使用して、LoginViewController.mでインポートを行うことができます。
追加された 著者 Dennis Bliefernicht,
私はこれが本当に事実だと思う、私は私のappdelegate.hのloginviewcontroller.hと私のloginviewcontroller.hのappdelegate.hのインポートのインポートを持っていた。 loginviewcontrollerのインポートを.mに移しました。loginviewcontrollerでは、必要なメソッドでAppDelegate * appDel =(AppDelegate *)[[UIApplication sharedApplication] delegate]のみを呼び出します。
追加された 著者 Youri,

2 答え

このコード行を使うのは良い考えではありません

@property (nonatomic, retain) AppDelegate *app;

どのクラスにも必要です。デリゲートアプリに必要な場所に簡単にアクセスするには、以下の手順を実行します。

AppDelegate* appDel = (AppDelegate*)[[UIApplication sharedApplication] delegate];

明らかにあなたがする必要があります:

#import "AppDelegate.h"

あなたがそれを使用するクラスで。

より洗練された方法でこれを行うには、次のようにAppDelegate.hにクラスメソッドを作成します。

+(AppDelegate*)sharedAppdelegate;

AppDelegate.mの次のように定義されています:

+(AppDelegate*)sharedAppdelegate
{
    return (AppDelegate*)[[UIApplication sharedApplication] delegate];
}

次に、必要な場所で(AppDelegate.hをインポートした後)呼び出すことができます:

AppDelegate* sharedApp = [AppDelegate sharedAppdelegate];

それが役に立てば幸い。

P.S. Why do you need to access the delegate?

14
追加された
あなたが言ったように、何とかそれはmで動作します。私はtabbarcontroller(2と両方がメインウィンドウに格納されている)から変更することができるように、代理人にいる必要があります。
追加された 著者 Youri,

.hファイルで前方参照を宣言する

@class AppDelegate

@interface LoginViewController : UIViewController
{

}

//変数のretainCountを水平に保つために保持するのではなく、代入として保持する

@property (nonatomic, assign) AppDelegate *app;

.mファイルで、AppDelegate.hをインポートしてAppdelegateへのポインタを取得し、変数を割り当てます

#import "AppDelegate.h"

- (void)viewDidLoad
{
   self.app = (AppDelegate*)[[UIApplication sharedApplication] delegate];
   //use the variable.
}
1
追加された
この行だけで、AppDelegate.hファイルをインポートした後で動作します。 AppDellegate * appDel =(AppDelegate *)[[UIApplication sharedApplication] delegate]; //今すぐappDelを使用する
追加された 著者 samfisher,
実際に私はself.app =(AppDelegate *)[[UIApplication sharedApplication] delegate]の理由は何も見ません。あなたのために働いていない。実際にAppDelegate.hファイルを実行しています。 AppDelegate * appDel =(AppDelegate *)[[UIApplication sharedApplication] delegate]; //今度はappDellegateのsharedInstanceを取得するたびにappDelを使用します。あなたのコントローラのデータを破壊しているあなたのコード(メモリ関連)。この問題のために同じものをデバッグする必要があります。そうしないと、後で問題が発生します。
追加された 著者 samfisher,
私のviewdidloadで同じコード行を持っています。保持の代わりに割り当てを試みましたが、助けにはなりませんでした。
追加された 著者 Youri,
行self.app =(AppDelegate *)[[UIApplication sharedApplication] delegate];問題が発生したのは.hファイルの行です。
追加された 著者 Youri,