SQLCipher和CoreData问题:CoreData无法解决问题

Vit*_*nko 13 core-data objective-c ios sqlcipher

我有一个SQLCipher数据库加密和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;
}
Run Code Online (Sandbox Code Playgroud)

我创建NSManagedObject的代码:

- (id)createObjectWithClassName:(NSString *)name
{
    NSManagedObject *object = [[NSClassFromString(name) alloc] initWithEntity:[NSEntityDescription entityForName:name inManagedObjectContext:self.context] insertIntoManagedObjectContext:self.context];
    return object;
}
Run Code Online (Sandbox Code Playgroud)

Vit*_*nko 1

最后我自己找到了答案。

我调查了不同的案例,并发现该问题仅发生在我的数据模型中。

问题是我在 NSManagedObject 类中有一个名为“index”的属性。

看起来 SQLCipher 内部使用了这样的属性,并且与之存在冲突。一旦我将其重命名为另一个名称,一切就正常了!