Как переопределить NSPersistentStoreCoordinator в UIManagedDocument

#sqlite #encryption #uimanageddocument

#sqlite #шифрование #uimanageddocument

Вопрос:

У меня есть приложение, которое использует Core Data через UIManagedObjectDocument. Я пытаюсь добавить шифрование в базовую базу данных SQLite с помощью зашифрованных основных данных (https://github.com/project-imas/encrypted-core-data ). Из описания для ECD мне нужно создать новый тип NSPersistentSroreCoordinator. Однако, похоже, я не могу сделать это с UIManagedObjectDocument, поскольку он создает свой собственный внутренний NSPersistenStoreCoordinator (который помечен как private).

Я создаю базу данных с помощью этой строки:

 UIManagedDocument* managedDoc = [[UIManagedDocument alloc] initWithFileURL:url];
  

Я попытался создать подкласс UIManagedDocument и создать его таким образом, но безуспешно:

 UIManagedDocument* managedDoc = [[EncryptedManagedDocument alloc] initWithFileURL:url];
  

И моя реализация класса:

 @interface EncryptedManagedDocument()
@property (nonatomic,retain,readonly) NSPersistentStoreCoordinator *encryptedStoreCoordinator;
@end

@implementation EncryptedManagedDocument

@synthesize encryptedStoreCoordinator = _encryptedStoreCoordinator;

-(NSPersistentStoreCoordinator*)encryptedStoreCoordinator
{
    if (_encryptedStoreCoordinator)
        return _encryptedStoreCoordinator;

    _encryptedStoreCoordinator = [EncryptedStore makeStore:[self managedObjectModel]:@"SOME_PASSCODE"];
    return _encryptedStoreCoordinator;
}

-(NSPersistentStoreCoordinator*)persistentStoreCoordinator
{
    return self.encryptedStoreCoordinator;
}
@end
  

Кто-нибудь знает правильный способ сделать это?

Спасибо!

Ответ №1:

Я собираюсь сказать, что это невозможно. UIManagedDocument прекрасно завершает работу и отлично экономит время в обычном случае, но для включения моего сценария я создал класс EncryptedManagedDocument, который похож на UIManagedDocument, но дал мне контроль над созданием моего собственного постоянного координатора хранилища.

Всем спасибо.