通过cocoa中的全局委托访问变量

时间:2011-03-22 11:03:54

标签: cocoa

我使用下面的代码访问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不返回任何内容

欢迎任何评论

2 个答案:

答案 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不是零。