0

我是 Core Data 的新手,我被困在我的 xCode 项目的这一部分。

我创建了一个核心数据实体“Person”,该实体具有以下属性:

  • 姓名;
  • 年龄;
  • 生日;
  • 地址;

并且此属性将显示在表格视图中。到目前为止,一切都很好。

我的问题是我希望表格有一个“添加字段”“添加行”单元格,所以当用户想要添加除了这些已经创建的属性之外的更多信息时,他只需单击单元格并选择字段名称和类型。

例如,如果他想在表格的详细视图中显示该人的“电话号码”,他将新字段命名为“电话号码”并选择其类型“号码”。然后他有一个额外的字段,他可以在其中添加此人的电话号码。

我怎样才能在核心数据中做到这一点?用户是否可以手动向实体添加新属性并选择其格式?最好的方法是什么?谢谢。

4

3 回答 3

1

你不能用 Core Data 做你想做的事。Core Data 不能更改结构,除非您制作新版本的设计,但您在 xcode 中这样做。

但是您可以轻松添加另一个名为 f.ex 的表。信息,它链接到人的单个连接,并且有很多人链接回信息表。

这样,您可以添加任意数量的字段和值,当然您添加的所有额外字段都将跟随同一个人,因此如果您想使用 cellPhone 字段,则必须将其添加到所有人。

我建议您使用直接 SQL,不要使用 Core Data。Core Data 不是数据库,它是一个对象存储,当你在 iOS 开发方面做得更好时,你就会明白其中的区别,它比你最初想象的要大得多。

有一个优秀的 SQLite 高级库,称为 FMDB,你可以在 github 上找到它:https ://github.com/ccgus/fmdb

在这里,您可以即时执行“Alter Table”等直接 SQL 查询,尽管您所追求的不是很简单,但这可能是一个真正有趣的项目。

祝你好运。

于 2012-09-25T21:38:05.907 回答
0

我不认为这在 Core Data 中是直接可行的,因为它的目的是对象持久性,并且您不能动态地向对象添加新属性。name它可以在某种程度上使用与具有, value(作为字符串)和data type字段的“额外属性”实体的一对多关系来伪造。

我相信您最好的选择是使用 SQLite 来动态修改表结构。(http://www.sqlite.org/lang_altertable.html)

于 2012-09-25T21:37:47.543 回答
0

我的上一家公司做了这样的事情,但它不是微不足道的。我无权访问代码,因此这或多或少将来自内存。

  • 你在你的实体中提供可转换的属性(这将是一个字典)

  • 模型对象必须为此提供 getter 和 setter,从而驱动原始方法设置/获取属性

  • 你提供了一个 getter/setter 沿着 -objectForKey 和 -setObject forKey 的行来读取和写入值

  • 当您被告知“错误”时,您会更新实体中的字典

总之,维护一个键值对字典。也许您维护一个影子字典,它会根据需要进行初始化和更新。自从我上次看到这段代码以来已经有大约 4 年了,所以它有点模糊。但你应该明白这一点。这就像魔术一样——你可以任意设置任何键/值对(假设字符串键和 NSCoding 兼容的值),并且总是可以通过向字典询问其当前键集来请求键。

于 2012-09-25T21:46:32.743 回答