我在很多类中导入了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
进行任何更改,当它以此错误开始时。
我可以在其他类中导入它而不会出现问题。我也尝试重新创建课程,但没有帮助。
任何人都知道如何解决这个奇怪的错误?
答案 0 :(得分:14)
使用这行代码
并不是一个好主意@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。为什么需要访问该委托?
答案 1 :(得分:1)
在.h文件中声明转发引用
@class AppDelegate
@interface LoginViewController : UIViewController<UITextFieldDelegate>
{
}
//将其保留为赋值而不是保留以保持retainCount为变量
@property (nonatomic, assign) AppDelegate *app;
<。>在.m文件中,通过导入AppDelegate.h获取指向Appdelegate的指针然后分配变量
#import "AppDelegate.h"
- (void)viewDidLoad
{
self.app = (AppDelegate*)[[UIApplication sharedApplication] delegate];
//use the variable.
}