NSFileProtectionCompleteUnlessOpen отличается в iOS 13? - PullRequest
0 голосов
/ 15 октября 2019

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, чтобы избежать этой проблемы.

...