Помогите, я застрял с объективными глобальными переменными aka extern! я пишу свое первое приложение IOS, это игра, поэтому, чтобы сохранить свой прогресс, я написал некоторые глобальные переменные в Globals.h:Изменения переменных внешних переменных Objective-c
@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
я сделать asured что метод инициализации выполняется хотя бы один раз, когда приложение запускается. В MainViewController это мой RootViewController в методе viewDidLoad я использую:
[GameInfo hasSave];
Какой статический метод в классе GameInfo и выглядеть следующим образом:
+(BOOL)hasSave
{
return [[NSFileManager defaultManager] fileExistsAtPath: savePath];
}
И когда я прослеживать НЕГО SavePath что-то вроде:
/пользователей/Apple/Library/Application Support/iPhone Simulator/5.0/Применения/472969F1-3760-4C74-8C8D-29681F47F4CB/Документы/save.plist
Но тогда я исполню IBAction Прикоснитесь внутрь в той же точки зрения, в то же время, которые выглядят как:
if ([GameInfo hasSave])
{
[GameInfo load];
}
И когда я делаю шаг в методе hasSave у меня есть какое-то странное значение SavePath:
ar.lproj
И мой метод, конечно, возвращает меня НЕТ. Но это происходит не только с моим savePath, но и со всеми другими внешними переменными. И иногда они правильные, но иногда это не так. Я думаю, может быть, проблема в том, где я их использую, может быть, я забыл что-то делать. Пожалуйста, помогите мне.
P.S .: Извините за мой английский и огромный quastion.
Я создал его в другом месте, когда использую метод [GameInfo saveGame], когда я начинаю новую игру, ведьма выглядит как + (void) save { [архив NSKeyedArchiverRootObject: game toFile: savePath]; } –
отредактирован и как вы используете savePath в своей GameInfo, вы объявили его там, если да, то как? –
Я импортировал Blobals.h, где объявляю extern NSString * savePath, поэтому я думаю, этого достаточно. Не так ли? –