NSFileProtectionCompleteUnlessOpen Документ :
Если файл открыт, когда разблокирован, вы можете продолжить доступ к файлу в обычном режиме, даже если пользователь заблокирует устройство.
В iOS 13, если пользователь блокирует устройство, приложение не может сделать [NSManagedObjectContext save:] в фоновом режиме. Это вызовет сбой в фоновом режиме. (Фоновый режим: обновления местоположения)
Я думал, что проблема вызвана обновлениями местоположения, что было ошибочным предположением. Я пробовал beginBackgroundTask, NSRunLoop mainRunLoop, NSTimer scheduleTimer.
код для init:
_persistentStoreCoordinator = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:[self managedObjectModel]];
NSDictionary *options = [NSDictionary dictionaryWithObjectsAndKeys:
NSFileProtectionCompleteUnlessOpen, NSPersistentStoreFileProtectionKey,
[NSNumber numberWithBool:YES], NSMigratePersistentStoresAutomaticallyOption,
[NSNumber numberWithBool:YES], NSInferMappingModelAutomaticallyOption, nil];
if (![_persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:storeURL options:options error:&error]) {
}
код для сохранения:
- (void) save {
id delegate = [[UIApplication sharedApplication] delegate];
NSManagedObjectContext *context = [delegate managedObjectContext];
[context performBlockAndWait:^{
[context save:nil];
}];
}
Журналы сбоев TestFlight упоминают о: NSSQLSavePlan, NSSQLCore, NSPersistentStoreCoordinator, NSManagedObjectContext
В настоящее время я переключаюсь на NSFileProtectionCompleteUntilFirstUserAuthentication, чтобы избежать этой проблемы.