ios – SQLCipher和CoreData问题:CoreData无法完成故障
2019年08月11日
作者:佚名
我有一个与SQLCipher数据库加密和CoreData的问题:
当我使用持久性存储协调器与SQLCipher,它总是崩溃与故障一对多的关系,在第一个应用程序重新启动后.
所以当我第一次启动应用程序时,我创建了具有关系的NSManagedObjects,然后,当我保存db并重新打开应用程序时,当我尝试访问这些关系时,它会崩溃.
没有SQLCipher一切工作正常.
当我使用持久性存储协调器与SQLCipher,它总是崩溃与故障一对多的关系,在第一个应用程序重新启动后.
所以当我第一次启动应用程序时,我创建了具有关系的NSManagedObjects,然后,当我保存db并重新打开应用程序时,当我尝试访问这些关系时,它会崩溃.
没有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; }
解决方法
最后我自己找到答案.
我调查不同的情况,并认为,这个问题只发生在我的数据模型中.
问题是我在NSManagedObject类中有一个名称为“index”的属性.
看来SQLCipher在内部使用这样的属性,并且与它冲突.一旦我把它重新命名为另一个名字,一切正常!
以上是来客网为你收集整理的ios – SQLCipher和CoreData问题:CoreData无法完成故障全部内容,希望文章能够帮你解决ios – SQLCipher和CoreData问题:CoreData无法完成故障所遇到的程序开发问题。
如果觉得来客网网站内容还不错,欢迎将来客网网站推荐给程序员好友。