Класс AppDelegate не найден - PullRequest
       22

Класс AppDelegate не найден

4 голосов
/ 06 февраля 2012

Я импортировал AppDelegate.h во многих классах с:

#import "AppDelegate.h"

@interface LoginViewController : UIViewController<UITextFieldDelegate>
{

}

@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, когда он начинался с этой ошибки.

Я могу импортировать его в другие классы без проблем.Я также пытался воссоздать класс, но это не помогло.

У кого-нибудь есть идеи, как решить эту странную ошибку?

Ответы [ 2 ]

14 голосов
/ 06 февраля 2012

Не стоит использовать эту строку кода

@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];

Надеюсь, это поможет.

PS Зачем вам нужен делегат?

1 голос
/ 06 февраля 2012

Объявить прямую ссылку в файле .h

@class AppDelegate

@interface LoginViewController : UIViewController<UITextFieldDelegate>
{

}

// сохранить его как присвоение, а не сохранить для сохранения уровня retainCount для переменной

@property (nonatomic, assign) AppDelegate *app;

в файле .m,захватить указатель на Appdelegate, импортировав AppDelegate.h, а затем присвоив переменную

#import "AppDelegate.h"

- (void)viewDidLoad
{
   self.app = (AppDelegate*)[[UIApplication sharedApplication] delegate];
   //use the variable.
}
...