Как сохранить прогресс игры для разных устройств? - PullRequest
0 голосов
/ 17 октября 2019

У меня есть простая игра в слова, которую я только что выложил в App Store. Ход игры сохраняется от сессии к сессии на моем iPad и iPhone 7 плюс, но не на iPhone XS Max.

Итак, код работает для сохранения прогресса игры, за исключением XS Max. Другие телефоны XS Max, а также мои.

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    // Override point for customization after application launch.


#if 0
    NSArray *puzzlesArray;

    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);

    NSString *documentsDirectory = [paths objectAtIndex:0];

    NSString *docFile = [documentsDirectory stringByAppendingPathComponent:@"Puzzles.plist"];

    puzzlesArray = [[NSArray alloc] initWithContentsOfFile:docFile];
    if (!puzzlesArray) {
        NSString *thePath = [[NSBundle mainBundle] pathForResource:@"puzzles" ofType:@"plist"];

        puzzlesArray = [[NSArray alloc] initWithContentsOfFile:thePath];
    }
#endif


    return YES;
}

- (void)applicationWillResignActive:(UIApplication *)application {

    [[NSNotificationCenter defaultCenter] postNotificationName:@"applicationWillResignActive" object:self];

}

- (void)applicationDidEnterBackground:(UIApplication *)application {

    [[NSNotificationCenter defaultCenter] postNotificationName:@"applicationDidEnterBackground" object:self];
}

Оба с соответствующим кодом в игровом контроллере.

- (BOOL)writeApplicationData:(NSData *) data toFile:(NSString *)docFile {

    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);

    NSString *documentsDirectory = [paths objectAtIndex:0];

    if (!documentsDirectory) {

        NSLog(@"Documents directory not found!");

        return (NO);

    }

    NSString *appFile = [documentsDirectory stringByAppendingPathComponent:docFile];


    return ([data writeToFile:appFile atomically:YES]);
}

- (void)applicationWillTerminate:(UIApplication *)application {

#if 0

    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);

    NSString *documentsDirectory = [paths objectAtIndex:0];

    NSString *docFile = [documentsDirectory stringByAppendingPathComponent:@"puzzles.plist"];

    NSData *pData = [[[NSData alloc] initWithContentsOfFile:docFile] autorelease];

    [self writeApplicationData:pData toFile:docFile];
#endif // if 0

}

- (NSData *)applicationDataFromFile:(NSString *)docFile {

    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);

    NSString *documentsDirectory = [paths objectAtIndex:0];

    NSString *appFile = [documentsDirectory stringByAppendingPathComponent:docFile];

    NSData *pData = [[NSData alloc] initWithContentsOfFile:appFile];

    return (pData);

}

@end

У меня нет кода в applicationDidEnterBackground или applicationWillEnterForeground.

Для XS Max игры сохраняются в течение двух дней или около того, прежде чем вернуться к точке входа.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...