“错误:预期';'在声明清单末尾“目标c 当我试图声明全局变量
时 @implementation CachingManager{
NSMutableArray*object = [[NSMutableArray alloc] init];
}
答案 0 :(得分:2)
您可以在此处创建实例变量,但不能像您一样在此处初始化这些实例变量。 它们都被初始化为零或零。所以当你写一个等号时,编译器会期望一个分号。
您可以在init方法或其他进行类初始化的方法中初始化它们,以使它们成为全局变量。 e.g。
.m文件中的实例变量的接口块:
@interface CachingManager ()
{
// instance variables initialized to nil or zeroes
NSMutableArray *object; // global ivar
}
@end
实施部分.m文件:
@implementation CachingManager
- (void)viewDidLoad {
[super viewDidLoad];
object = [[NSMutableArray alloc] init]; // initialization takes place
}
答案 1 :(得分:1)
这不是一个全球变量。那将是一个实例变量,并且特定语法在2005年之后并不常用(实际上,它在90年代中期之后并不常见)。
如果你想要一个全局变量,请执行:
NSMutableArray *myGlobal;
位于顶层的某个位置 - 与您的来源@implementation
处于同一级别。
但是,你必须在其他地方初始化全局变量。通常,在类的+ initialize或+ load方法中。
答案 2 :(得分:1)
实现全局变量并管理它们的生命周期(即它们被初始化)甚至提供全局方法的一种方法是实现暴露这些变量/方法并使用单例模式的类:
<强> yourFile.h:强>
#import <Foundation/Foundation.h>
@interface GlobalVars : NSObject
{
NSMutableArray *_truckBoxes;
NSMutableArray *_farmerlist;
NSString *_farmerCardNumber;
NSString *_fName;
}
+ (GlobalVars *)sharedInstance;
@property(strong, nonatomic, readwrite) NSMutableArray *truckBoxes;
@property(strong, nonatomic, readwrite) NSMutableArray *farmerList;
@property(strong, nonatomic, readwrite) NSString *farmerCardNumber;
@property(strong, nonatomic, readwrite) NSString *fName;
@end
<强> yourFile.m:强>
#import "GlobalVars.h"
@implementation GlobalVars
@synthesize truckBoxes = _truckBoxes;
@synthesize farmerList = _farmerList;
@synthesize frameCardNumber = _frameCardNumber;
@synthesize fName = _fName;
+ (GlobalVars *)sharedInstance {
static dispatch_once_t onceToken;
static GlobalVars *instance = nil;
dispatch_once(&onceToken, ^{
instance = [[GlobalVars alloc] init];
});
return instance;
}
- (id)init {
self = [super init];
if (self) {
_truckBoxes = [[NSMutableArray alloc] init];
_farmerlist = [[NSMutableArray alloc] init];
// Note these aren't allocated as [[NSString alloc] init] doesn't provide a useful object
_farmerCardNumber = nil;
_fName = nil;
}
return self;
}
然后您可以使用这样的全局变量,例如:
GlobalVars *globals = [GlobalVars sharedInstance];
globals.fName = @"HelloWorld.txt";
[globals.farmerList addObject:@"Old Macdonald"];
[self processList:[globals farmerList]];
但请考虑:
您不需要像这样使用全局变量;您应该能够创建一个模型对象,该对象根据需要创建,并引用它传递给视图。这是MVC。 您还发布了一个与Objective-C极为常见的无关问题的堆栈跟踪;一旦你意识到它是什么,只有你能解决这个错误。