无法访问 AppDelegate 变量

Posted

技术标签:

【中文标题】无法访问 AppDelegate 变量【英文标题】:Cannot access AppDelegate variables 【发布时间】:2015-12-05 20:36:57 【问题描述】:

我已经在我的应用委托中声明了一个变量:

@interface AppDelegate : UIResponder <UIApplicationDelegate, CLLocationManagerDelegate>
CLLocationManager *locationManager;


@property(nonatomic, strong) PFGeoPoint *shovelLocation;

我已经在我的 AppDelegate 中合成了它:

@interface AppDelegate ()

@end

@implementation AppDelegate

@synthesize shovelLocation;

我已将 AppDelegate.h 文件导入我的另一个视图控制器文件,我试图从以下文件访问此对象:

#import "AppDelegate.h"

问题是,当我创建 appDelegate 对象并尝试访问其属性时,它说它没有 shovelLocation 属性:

//get location
AppDelegate *appDelegate = (AppDelegate*)[[UIApplication sharedApplication] delegate];
PFGeoPoint *location = appDelegate.shovelLocation;
                                   ^
                                      Property 'shovelLocation' not found on object of type 'AppDelegate *'

这不是我正在创建的 AppDelegate 的真实实例,还是我遗漏了一些明显的东西?

【问题讨论】:

您是否尝试过清理并重建? 是的,我这样做了,我什至还重新启动了 xcode 你是否包含了应用代理的标题 如在#import "AppDelegate.h" 中? #import 是否包含在某处?我想是的,但这是我唯一能想到的。 【参考方案1】:

不确定这是否能解决您的问题,但请尝试使用 retain 而不是 strong

@property (nonatomic, retain) PFGeoPoint *shovelLocation;

也不需要演员表。 (AppDelegate*)

AppDelegate *appDelegate = [[UIApplication sharedApplication] delegate];

【讨论】:

【参考方案2】:

Appdelegate.h 文件中写入以下代码:

@property(nonatomic, strong) PFGeoPoint *shovelLocation;
+(AppDelegate *)sharedAppDelegate;

并在Appdelegate.m中写入方法

+(AppDelegate *)sharedAppDelegate

    return (AppDelegate *)[[UIApplication sharedApplication] delegate];

并编写以下代码来调用此变量:

AppDelegate *app=[AppDelegate sharedAppDelegate];
PFGeoPoint *location = app.shovelLocation;

它正在工作,使用它!

【讨论】:

以上是关于无法访问 AppDelegate 变量的主要内容,如果未能解决你的问题,请参考以下文章

Singleton 类 DataLoader - 在 AppDelegate 中从 Core Data 设置值,但无法访问其他类中的 DataLoader 变量

无法从 AppDelegate 访问 NSObject 的公共方法

如何从 AppDelegate 访问 ViewController 变量

AppDelegate (OSX) 中主 NSWindow 的引用出口

AppDelegate 被不同的类访问,来自 RootController.m

从 AppDelegate 更改 WebView url