gpt4 book ai didi

iphone - 为什么当我添加属性时 CoreData 崩溃?

转载 作者:行者123 更新时间:2023-12-03 18:38:19 30 4
gpt4 key购买 nike

每次我向 CodeData 对象模型添加新属性时,我都必须清除数据库文件,否则会出现以下错误:

2010-11-13 15:26:44.580 MyApp[67066:207] * Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: '+entityForName: could not locate an NSManagedObjectModel for entity name 'myApp''

必须有一种方法能够在不丢失整个数据库的情况下添加额外的字段。

我需要做什么才能保留我的数据?

最佳答案

有一种方法,这种方法叫做自动轻量级迁移。更改对象模型时需要进行代码更改和额外的步骤。

对于代码,您必须向初始化持久存储协调器的方法添加两个选项。像这样的东西:

- (NSPersistentStoreCoordinator *)persistentStoreCoordinator {
if (persistentStoreCoordinator_ != nil) {
return persistentStoreCoordinator_;
}
NSString *storePath = [AppDelegate_Shared coredataDatabasePath];
NSURL *storeURL = [NSURL fileURLWithPath:storePath];

// important part starts here
NSDictionary *options = [NSDictionary dictionaryWithObjectsAndKeys:
[NSNumber numberWithBool:YES], NSMigratePersistentStoresAutomaticallyOption,
[NSNumber numberWithBool:YES], NSInferMappingModelAutomaticallyOption,
nil];
NSError *error = nil;
persistentStoreCoordinator_ = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:[self managedObjectModel]];
if (![persistentStoreCoordinator_ addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:storeURL options:options error:&error]) {
// and ends here

LogError(@"Unresolved error %@, %@", error, [error userInfo]);
// Do something
}
return persistentStoreCoordinator_;
}

现在,如果您想更改模型,则必须在进行任何更改之前创建模型版本。
选择您的数据模型,然后进入主菜单Design -> Data Model -> Add Model Version。您的“旧”模型将被重命名,并且您可以在当前模型(带有绿色标记的模型)中进行更改。
所有旧模型都会保留并将放入您的应用程序中,以便您的应用程序可以执行“自动轻量级迁移”并将现有数据库升级到新模型。

关于iphone - 为什么当我添加属性时 CoreData 崩溃?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4174863/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com