sqlite - 如何覆盖 UIManagedDocument 中的 NSPersistentStoreCoordinator

标签 sqlite encryption uimanageddocument

我有一个通过 UIManagedObjectDocument 使用核心数据的应用程序。我正在尝试使用加密核心数据 ( https://github.com/project-imas/encrypted-core-data ) 向底层 SQLite 数据库添加加密。根据 ECD 的描述,我需要创建一种新型的 NSPersistentSroreCoordinator。但是,我似乎无法使用 UIManagedObjectDocument 执行此操作,因为它创建了自己的内部 NSPersistenStoreCoordinator(标记为私有(private))。

我用这一行创建数据库:

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

我尝试继承 UIManagedDocument 并以这种方式创建它,但没有成功:

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

还有我的类(class)实现:

@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

有谁知道正确的方法吗?

谢谢!

最佳答案

我要说这是不可能的。 UIManagedDocument 很好地包装了一切,对于常见情况来说可以节省大量时间,但为了实现我的场景,我创建了一个类似于 UIManagedDocument 的 EncryptedManagedDocument 类,但让我可以控制创建我自己的持久存储协调器。

谢谢大家。

关于sqlite - 如何覆盖 UIManagedDocument 中的 NSPersistentStoreCoordinator,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24566060/

相关文章:

sqlite - SQlite.db文件无法打开

c# - Dapper:字符串未被识别为有效的日期时间

ios - Xcode 8 GM -- SQLite 错误代码 :6922, 'disk I/O error'

ios - iCloud NSPersistentStoreDidImportUbiquitousContentChangesNotification 仅在应用启动后立即调用

php - PHP到sqlite3-无法上传

c - 在 AES 密码对象上禁用 PKCS#7 填充?

java - 为什么我的 AES 加密会引发 InvalidKeyException?

C - 使用 CBC(密码 block 链接)模式的 OpenSSL 加密

objective-c - 获取 UIManagedDocument 的 URL

python - 随着数据库的增长,插入速度会随着时间的推移而变慢(无索引)