我使用下面的代码访问iPhone(coacoa touch)项目中的变量'myInt'
appDelegate =(AppDelegate *)[[UIApplication sharedApplication] delegate];
UIApplication *app=[UIApplication sharedApplication];
appDelegate.myInt=1;
有效。
但是当我尝试将项目迁移到Cocoa时,我发现没有办法像上面那样执行相同的功能。如何使用委托概念访问全局变量(不使用'extern NSInteger myInt')
以下代码不起作用
appDelegate =(AppDelegate *)[[NSApplication sharedApplication] delegate];
NSApplication *app=[NSApplication sharedApplication];
appDelegate.myInt=1;
appDelegate.myInt不返回任何内容
欢迎任何评论
答案 0 :(得分:0)
我猜想在第二个代码段中,您没有myInt
声明为您的委托类的property(或者声明它的声明不正确),这意味着您无法使用点语法obj.prop
来访问它。您可以进行两项简单的更改。
使用常规的旧方法调用语法访问myInt
:
[appDelegate myInt];
或更改您的app委托以将该变量声明为属性:
@interface MyAppDelegate : NSObject <NSApplicationDelegate> {
NSInteger myInt;
}
@property (assign) NSInteger myInt;
@end
@implementation MyAppDelegate
@synthesize myInt;
@end
答案 1 :(得分:0)
我想你可以确保appDelegate
确实是AppDelegate
的一个实例。
NSLog(@"[appDelegate isKindOfClass:[AppDelegate class]] returns %@", [appDelegate isKindOfClass:[AppDelegate class]] ? @"YES" : @"NO");
虽然我发现你不太可能确保appDelegate
不是零。