我在Appdelegate中定义了一个全局变量。我希望在其他控制器中使用。 我可以这样使用:
AppDelegate *appDelegate=(AppDelegate *)[[UIApplication sharedApplication]delegate];
appdelegate.name=[NSString stringwithFormat:@"%@",ename];
但是,无论我想在viewController中访问appdelegates变量,我每次都必须使用AppDelegate *appDelegate=(AppDelegate *)[[UIApplication sharedApplication]delegate];
,它会发出警告消息,例如'AppDelgate的本地声明隐藏实例变量'。所以我有一种方法可以只声明它一旦在ViewController中多次访问它。我怎么能摆脱这个警告?
编辑:
.h :
#import "AppDelegate.h"
@interface More : UIViewController
{
AppDelegate *appdelegate;
}
.m:
- (void)viewDidLoad
{
[super viewDidLoad];
appDelegate=(AppDelegate *)[[UIApplication sharedApplication]delegate]; //error :Use of undeclared identifier appDelegate
}
答案 0 :(得分:1)
在Appdelegate make方法中。
+(AppDelegate*)sharedInstance
{
return (AppDelegate*)[[UIApplication sharedApplication] delegate];
}
然后只需在控制器头文件中导入appdelegate并使用
[AppDelegate sharedInstance]. name = [NSString stringwithFormat:@"%@",ename];;
也许这会对你有帮助。
答案 1 :(得分:1)
根据您在编辑下发布的已发布代码,您的问题似乎就是您刚刚宣布AppDelegate * appdelegate;在.h
并在.m。
中使用“appDelegate”而不是“appdelegate”它显然是一个未定义的变量,不是吗?!
答案 2 :(得分:0)
如果您的问题只是警告,请将指针的本地名称更改为appDelegate:
AppDelegate *myLocalPointerToAppDelegate=(AppDelegate *)[[UIApplication sharedApplication]delegate];
myLocalPointerToAppDelegate.name=[NSString stringwithFormat:@"%@",ename];
答案 3 :(得分:0)
为此,在要使用AppDelegate
对象的类中创建一个方法,
-(AppDelegate *)appdelegate
{
(AppDelegate *)[[UIApplication sharedApplication]delegate];
}
然后,无论您想在该类中使用AppDelegate
的对象,都可以像[self appdelegate].name
一样使用它。
答案 4 :(得分:0)
或者您可以在plist文件中创建AppDelegate对象,然后您可以在每个控制器中使用它...
答案 5 :(得分:0)
非常差的样式:实例变量应始终以下划线开头。例如,_appDelegate。在实例方法中,使用实例变量的名称自动引用self->。例如,当你有一个实例变量“appDelegate”时写“appDelegate”实际上意味着自我> appDelegate。这就是为什么你有警告:引入一个名为appDelegate的变量意味着在源代码中使用“appDelegate”现在引用局部变量而不是实例变量。那是在惹麻烦。 (“要求麻烦”意味着“任何有经验的程序员都会告诉你这迟早会导致一个无法修复的错误”)。只需添加一个变量,您就可能改变了许多代码行的含义。使用下划线对所有实例变量进行前缀解决了这个问题。
这正是编译器警告你的原因:编译器发现你只是挖了一个洞,你最终会陷入其中。
你有一个名为appDelegate或_appDelegate的实例变量也很奇怪,因为你应该通过调用[[UIApplication sharedApplication] delegate]获得appDelegate。