我正试图将我的头围绕在单身人士身上,我明白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
我确信这些是可以简单纠正的基本问题。任何帮助表示赞赏。
答案 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
等。相反,请使用NSInteger
,NSUInteger
,CGFloat
等。