访问AppDelegate的成员变量

时间:2012-01-26 06:04:42

标签: iphone objective-c

我正试图将我的头围绕在单身人士身上,我明白App Delegate本质上是一个单身对象。我正在尝试在App Delegate中有一些我可以从任何其他类访问的成员变量。我是在App Delegate中做到的:

@interface AppDelegate : NSObject <UIApplicationDelegate> {
    UIWindow            *window;
    RootViewController  *viewController;
    int screenwidth;
}

@property (nonatomic, retain) UIWindow *window;
@property (nonatomic) int screenwidth;

然后在.m中我这样做了:

- (void) applicationDidFinishLaunching:(UIApplication*)application
{
  ...
   screenwidth=400; //arbitrary test number

现在我在项目中有另一个类,它在.h:

中完成
#import "AppDelegate.h"

在.m我有这个地方:

  test=(AppDelegate*)[[[UIApplication sharedApplication] delegate] screenwidth];

但是,它声称“screenwidth”是一个未找到的实例方法。我也试过这个:

test=(AppDelegate*)[[UIApplication sharedApplication] delegate].screenwidth;

这使用点语法,因为screenwidth已合成,但声称property screenwidth not found

我确信这些是可以简单纠正的基本问题。任何帮助表示赞赏。

3 个答案:

答案 0 :(得分:3)

考虑尝试:

test=[(AppDelegate*)[[UIApplication sharedApplication] delegate] screenwidth];

我认为您的两次尝试都试图将.screenwidth结果转换为AppDelegate*

答案 1 :(得分:1)

确保您提供自己的-screenwidth访问者或使用@synthesize指令让编译器提供一个:

@synthesize screenwidth

@property指令只是一个承诺,将提供screenwidth属性的访问器。您仍然必须按上述方式提供它们。

答案 2 :(得分:0)

如果您想避免每次都投射到AppDelegate课程,我建议您使用以下内容:

MyAppDelegate.h

@interface MyAppDelegate : NSObject <UIApplicationDelegate>

+ (MyAppDelegate *)sharedAppDelegate;

@property (nonatomic) int screenwidth;

/* ... */

@end

MyAppDelegate.m

@implementation LcAppDelegate

+ (MyAppDelegate *)sharedAppDelegate
{
    return (MyAppDelegate *)[[UIApplication sharedApplication] delegate];
}

/* ... */

@end

当然,您仍然需要在要访问它的文件中#import "MyAppDelegate.h"

#import "MyAppDelegate.h"

/* ... */

NSLog(@"the apps screen width: %d", [MyAppDelegate sharedAppDelegate].screenwidth);

BTW,请注意,您不应在Objective-C代码中使用int等。相反,请使用NSIntegerNSUIntegerCGFloat等。