如何在iOS中动态创建Core Data实体和属性?

时间:2011-11-16 11:33:40

标签: ios core-data

实际上我的数据来自服务器,它依赖于数据来创建属性和实体的数量......

5 个答案:

答案 0 :(得分:1)

您要修改的作品是NSManagedObjectModel。但是,一旦使用它就无法修改,因为它会更改数据库架构。您必须复制模型,修改模型,转换所有数据,然后切换到新模型。以下页面应该会有所帮助:

答案 1 :(得分:0)

抱歉,但这是不可能的。

您需要根据您的要求使实体和属性保持最大可能性,并且仅使用运行时所需的那些属性。

答案 2 :(得分:0)

如果您使用Key / Value实体创建核心数据模型,也许。

E.g: CarEntity有2个属性:键/值(两种类型字符串)

CarEntity中的值可能是:

  • “Model”,“VW”
  • “Power”,“7 kW”
  • “无论什么关键”,“无论什么价值”

这会对你有用吗?

答案 3 :(得分:0)

您可以在将ManagedObjectModel分配给NSPersistentStoreCoordinator之前创建/修改实体,这是一个示例代码。

NSURL * modelURL = [[NSBundle mainBundle] URLForResource:@“CoreDataDemoModel”withExtension:@“momd”];     NSManagedObjectModel * mom = [[NSManagedObjectModel alloc] initWithContentsOfURL:modelURL];

NSEntityDescription *runEntity = [[NSEntityDescription alloc] init];
[runEntity setName:@"Run"];
[runEntity setManagedObjectClassName:@"Run"];
[mom setEntities:@[runEntity]];

NSMutableArray *runProperties = [NSMutableArray array];

NSAttributeDescription *dateAttribute = [[NSAttributeDescription alloc] init];
[runProperties addObject:dateAttribute];
[dateAttribute setName:@"date"];
[dateAttribute setAttributeType:NSDateAttributeType];
[dateAttribute setOptional:NO];

NSAttributeDescription *idAttribute= [[NSAttributeDescription alloc] init];
[runProperties addObject:idAttribute];
[idAttribute setName:@"processID"];
[idAttribute setAttributeType:NSInteger32AttributeType];
[idAttribute setOptional:NO];
[idAttribute setDefaultValue:@0];

[runEntity setProperties:runProperties];

NSPersistentStoreCoordinator *store = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:mom];

NSError *error = nil;
NSURL *storeURL = [[self applicationDocumentsDirectory] URLByAppendingPathComponent:@"CoreDataDemoModel.sqlite"];
[store addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:storeURL options:nil error:&error];
NSManagedObjectContext *context = [[NSManagedObjectContext alloc] init];
[context setPersistentStoreCoordinator:store];

答案 4 :(得分:0)

  

在对象图管理器(托管对象上下文或持久性存储协调器)使用托管对象模型之前,托管对象模型是可编辑的。这样,您可以动态创建或修改它们,直到首次使用它们为止。但是,一旦使用了模型,就不得更改它。这是在运行时强制执行的-当对象管理器首先使用模型获取数据时,整个模型将变得不可编辑。在此之后对模型或其任何子对象进行任何更改的尝试都将引发异常。如果需要修改正在使用的模型,请创建一个副本,修改该副本,然后丢弃具有旧模型的对象。

https://developer.apple.com/documentation/coredata/nsmanagedobjectmodel