Core Data 以编程方式向条目添加属性

Posted

技术标签:

【中文标题】Core Data 以编程方式向条目添加属性【英文标题】:Core Data add attributes to entries programmatically 【发布时间】:2011-12-24 14:05:48 【问题描述】:

我刚刚开始使用核心数据。我有一堆具有大约 40-50 个属性的实体。鉴于我有一个代表属性名称的字符串数组(这些属性的类型都是字符串),有没有一种方法可以以编程方式从数组中设置属性?还是我必须手动将这些属性复制粘贴到 Xcode IDE 中?

【问题讨论】:

【参考方案1】:

您可以通过编程方式创建模型。 Xcode IDE 对大多数人来说是最简单的。

创建你的模型

NSManagedObjectModel *mom = [[[NSManagedObjectModel alloc] init] autorelease];

然后用

创建你的实体
NSMutableArray *entities = [NSMutableArray array];
NSEntityDescription *event = [[[NSEntityDescription alloc] init] autorelease];
[entities addObject:event];
[event setName:@"Event"];
[event setProperties:eventProperties];
...

然后将实体添加到模型中:

[mom setEntities:entities];

请注意,一旦将模型与商店/上下文一起使用,就无法更改模型。

创建模型后,您可以使用 NSCoding 保存它。

这也显示在Core Data Utility Tutorial中。

【讨论】:

【参考方案2】:

虽然摆弄 sqlite 数据存储对您没有帮助,但在您的项目文件夹中有一个描述数据模型的文件。该文件采用 xml 格式,因此您可以遍历数组并在该文件中生成必要的条目。然后您可以覆盖默认文件并在 Xcode 中重新打开您的项目。如果你幸运的话,你所有的实体和属性都会在那里。

为了让您开始,让我将您指向该文件。如果你刚开始一个包含默认核心数据模型的新项目,它应该位于

<project directory>/<project name>/project_name.xcdatamodeld/project_name.xcdatamodel

默认是这样的:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<model name="Test1.xcdatamodel" userDefinedModelVersionIdentifier="" type="com.apple.IDECoreDataModeler.DataModel" documentVersion="1.0" lastSavedToolsVersion="1" systemVersion="11A491" minimumToolsVersion="Automatic" macOSVersion="Automatic" iosVersion="Automatic">
    <entity name="Event">
        <attribute name="timeStamp" optional="YES" attributeType="Date"/>
    </entity>
    <elements>
        <element name="Event" positionX="261" positionY="189"  />
    </elements>
</model>

希望这会有所帮助。

【讨论】:

Apple 根本不支持。请不要使用这个。 只是为了重申丹尼尔的评论。请不要这样做。 Apple 提供了完美可用的 API,用于在运行时修改托管对象模型(有关更多信息,请参阅 NSManagedObjectModel API 文档)。不要乱用 xcdatamodel 文件 - 它的目的是支持 Xcode 模型编辑器,并且没有记录或支持。

以上是关于Core Data 以编程方式向条目添加属性的主要内容,如果未能解决你的问题,请参考以下文章

以编程方式或静态方式向 Wordpress 主题的 <html> 标签添加自定义属性

以编程方式获取 Core Data 实体描述

以编程方式添加到核心数据实体(如 IB 绑定“添加”)

Avalonia:如何以编程方式向 UserControl 添加控件

有人想以编程方式创建 Core Data 模型有啥理由吗?

旋转设备时以编程方式将视图添加到父 LinearLayout 会重复最后一个条目