【发布时间】:2015-02-03 09:56:02
【问题描述】:
我对 SQLCipher db 加密和 CoreData 有疑问: 当我将持久存储协调器与 SQLCipher 一起使用时,它总是在第一次重新启动应用程序后因错误的一对多关系而崩溃。 因此,当我第一次启动应用程序时,我创建了具有关系的 NSManagedObjects,然后,当我保存数据库并重新打开应用程序时,当我尝试访问这些关系时它会崩溃。 没有 SQLCipher 一切正常。
这是 SQLCipher 持久存储初始化的代码:
- (NSPersistentStoreCoordinator *)persistentStoreCoordinator
{
if (!_persistentStoreCoordinator) {
NSURL *storeURL = [[self applicationDocumentsDirectory] URLByAppendingPathComponent:@"MyApp.sqlite"];
NSDictionary *options = @{EncryptedStorePassphraseKey: @"MyApp",
EncryptedStoreDatabaseLocation: storeURL};
NSError *error;
_persistentStoreCoordinator = [EncryptedStore makeStoreWithOptions:options managedObjectModel:[self managedObjectModel] error:&error];
if (error) {
NSLog(@"%@", error);
}
}
return _persistentStoreCoordinator;
}
我创建 NSManagedObject 的代码:
- (id)createObjectWithClassName:(NSString *)name
{
NSManagedObject *object = [[NSClassFromString(name) alloc] initWithEntity:[NSEntityDescription entityForName:name inManagedObjectContext:self.context] insertIntoManagedObjectContext:self.context];
return object;
}
【问题讨论】:
-
创建托管对象的代码是什么样的?
-
@TomHarrington 我用 NSManagedObject 创建代码更新了帖子
-
您是否尝试运行任何迁移,或者您是否在保存数据库和重新打开应用程序之间对托管对象模型进行了任何更改?
-
我已经实现了这样的保护,但是客户想使用 SQLCipher...
标签: ios objective-c core-data sqlcipher