У меня есть простая игра в слова, которую я только что выложил в 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 игры сохраняются в течение двух дней или около того, прежде чем вернуться к точке входа.