Пожалуйста, помогите, я застрял с глобальными переменными target-c, иначе extern!
Я написал свое первое приложение для iOS, это игра, поэтому, чтобы сохранить свой прогресс, я написал несколько глобальных переменных в Globals.h:
@interface Globals : NSObject
extern float square;
extern float field;
extern float dx;
extern float dy;
extern NSURL *documentsUrl;
extern NSURL *dbUrl;
extern NSString *savePath;
extern FMDatabase *db;
@end
И Globals.m:
#import "Globals.h"
@implementation Globals
float square;
float field;
float dx;
float dy;
NSURL *documentsUrl;
NSURL *dbUrl;
NSString *savePath;
FMDatabase *db;
+(void)initialize
{
static BOOL initialized = NO;
if (!initialized)
{
initialized = YES;
square = 177.7778;
field = 146.0;
dx = 105;
dy = 58.5;
documentsUrl = [[[NSFileManager defaultManager] URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask] lastObject];
dbUrl = [documentsUrl URLByAppendingPathComponent:@"alias.sql"];
[[NSFileManager defaultManager] copyItemAtURL:[[NSBundle mainBundle] URLForResource:@"alias" withExtension:@"sql"] toURL:dbUrl error:nil];
savePath = [[documentsUrl URLByAppendingPathComponent:@"save.plist"] path];
db = [FMDatabase databaseWithPath:[dbUrl path]];
//db.logsErrors = YES;
//db.traceExecution = YES;
if (![db open]) {
NSLog(@"Could not open db.");
}
}
}
@end
Я убедился, что метод initialize выполняется хотя бы один раз при запуске приложения. В MainViewController, который является моим RootViewController в методе viewDidLoad, я использую:
[GameInfo hasSave];
Это статический метод в классе GameInfo, который выглядит следующим образом:
+(BOOL)hasSave
{
return [[NSFileManager defaultManager] fileExistsAtPath: savePath];
}
И когда я отслеживаю его, savePath выглядит примерно так:
/ Пользователи / Apple / Библиотека / Поддержка приложений / iPhone Simulator / 5.0 / Приложения / 472969F1-3760-4C74-8C8D-29681F47F4CB / Documents / save.plist
Но затем я выполняю IBAction при Touch Up внутри в том же виде, в то же время, которое выглядит как:
if ([GameInfo hasSave])
{
[GameInfo load];
}
И когда я делаю шаг в методе hasSave, у меня появляется какое-то странное значение savePath:
ar.lproj
И мой метод, конечно, возвращает мне НЕТ. Но это происходит не только с моим savePath, но и со всеми другими внешними переменными. И иногда они верны, но иногда нет.
Я думаю, может быть, проблема в том, где я их использую, может, я забыл что-то сделать. Пожалуйста, помогите мне.
P.S .: Извините за мой английский и огромный вопрос.