0

我在 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



}
4

6 回答 6

1

从您在编辑下给出的发布代码看来,您的问题似乎是您刚刚声明了 AppDelegate *appdelegate; 在.h

并在 .m 中使用“appDelegate”而不是“appdelegate”。

它显然是一个未定义的变量,不是吗?!

于 2013-12-24T10:07:45.150 回答
1

在 Appdelegate make 方法中。

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

然后只需在控制器头文件中导入 appdelegate 并使用

[AppDelegate sharedInstance]. name = [NSString stringwithFormat:@"%@",ename];;

也许这会对你有所帮助。

于 2013-02-01T10:03:58.270 回答
0

为此,在要使用AppDelegate的对象的类中创建一个方法,

-(AppDelegate *)appdelegate
{
    (AppDelegate *)[[UIApplication sharedApplication]delegate];
}

然后,无论你想AppDelegate在那个类中使用 object of 的任何地方,你都可以使用它,如[self appdelegate].name.

于 2013-02-01T09:53:56.823 回答
0

如果您的问题只是警告,请将指针的本地名称更改为您的 appDelegate:

AppDelegate *myLocalPointerToAppDelegate=(AppDelegate *)[[UIApplication sharedApplication]delegate];
  myLocalPointerToAppDelegate.name=[NSString stringwithFormat:@"%@",ename];
于 2013-02-01T09:51:23.307 回答
0

或者您可以在 plist 文件中创建 AppDelegate 对象,然后您可以在每个控制器中使用它...

于 2013-02-01T12:13:46.220 回答
0

非常糟糕的风格:实例变量应始终以下划线开头。例如,_appDelegate。在实例方法内部,使用实例变量的名称会自动引用 self->。例如,当你有一个实例变量“appDelegate”时写“appDelegate”实际上意味着self->appDelegate。这就是您收到警告的原因:引入名为 appDelegate 的变量意味着在源代码中使用“appDelegate”现在指的是局部变量,而不是实例变量。那是自找麻烦。(“自找麻烦”的意思是“任何有经验的程序员都会告诉你,这迟早会导致无法修复的错误”)。只需添加一个变量,您就可能改变了许多代码行的含义。

这正是编译器警告您的原因:编译器发现您只是给自己挖了一个最终会掉入的洞。

你有一个名为 appDelegate 或 _appDelegate 的实例变量也很奇怪,因为你应该通过调用 [[UIApplication sharedApplication]delegate] 来获取 appDelegate。

于 2014-02-16T22:08:02.003 回答