我从一开始就构建了一个iOS应用程序,其中包含错误.由于源是从模板开始构建的,因此它的appdelegate.h看起来像:
@interface myAppDelegate : NSObject <UIApplicationDelegate> {
    UIWindow *window;
    myViewController *viewController;
}
BOOL       myBool;     // intended to be globally accessible
NSString   *myString;  // intended to be globally accessible
@end
我从许多其他.m源文件中引用myBool和*myString,以及全局变量.
在XCode 3.2.6下面,我不记得在编译时遇到任何问题.
在3.2.6,在编译时出现警告,指向appdelegate.h中的这些"全局"变量,说:"不能在@interface或@protocol中声明变量".由于编译或应用程序运行时没有其他问题,遗憾的是我没有考虑这些警告.
现在,使用XCode 4.2,我无法编译此源,因为以前的警告变成了构建错误.它们引用并指向不同.m文件中的每一行,其中存在对"全局变量"的引用.
有没有一种简单的方法可以解决这个问题,考虑到我仍然想要将这些变量/引用作为全局变量/引用来访问?
附加问题:到目前为止,我正在评估得到答案(感谢大家),另一个问题:任何想法为什么在XCode v3.2.6下面没有给出警告,只有3.2.6中的警告如果这是我的真正错误侧?为什么代码仍然编译,可以毫无问题地运行?
Sim*_*n G 32
他们不能去那里.你可以把它们放在大括号{}里面,如下所示:
@interface myAppDelegate : NSObject <UIApplicationDelegate> {
    UIWindow *window;
    myViewController *viewController;
BOOL       myBool;     // intended to be globally accessible
NSString   *myString;  // intended to be globally accessible
}
@end
这使它们成为实现类的全局.但是,如果您希望它们对应用程序中的每个类都是全局的,那么您应该将它们放在App-Prefix.pch文件中:
//
// Prefix header for all source files of the ... project
//
#import <Availability.h>
BOOL       myBool;     // intended to be globally accessible
NSString   *myString;  // intended to be globally accessible
#ifndef __IPHONE_3_0
flu*_*ffy 13
您是否尝试将它们定义为类中的公共成员?Objective-C中的类与您可能熟悉的其他语言有很大不同.在花括号之外,您只能定义方法.如果要创建可公开访问的成员,请将它们定义为属性:
@interface myAppDelegate : NSObject <UIApplicationDelegate> {
    UIWindow *window;
    myViewController *viewController;
    BOOL _myBool;
    NSString *_myString;
}
@property BOOL       myBool;     // intended to be globally accessible
@property NSString   *myString;  // intended to be globally accessible
@end
然后在@implementation中执行以下操作:
@implementation myAppDelegate
@synthesize myBool = _myBool;
@synthesize myString = _myString;
然后你可以访问它们myObject.myBool等等.
如果您只是想让它们成为类的所有实例的静态("全局")数据,那么就像其他海报所说的那样,您希望将定义移动到您的.m文件中(并且理想地声明它们static以便它们不会导致链接问题).