我是Core Data的新手,我被困在xCode项目的这一部分。
我创建了一个核心数据实体“Person”,该实体具有以下属性:
此属性将显示在tableview中。到目前为止一切都很好。
我的问题是,我希望表格中包含“添加字段”或“添加行”单元格,以便当用户想要添加更多信息时这些已创建的属性只需单击单元格并选择字段名称和类型即可。
例如,如果他想在桌子的详细视图中找到该人的“电话号码”,则他将新字段命名为“电话号码”并选择其类型“号码”。然后他有一个额外的字段,他可以添加该人的电话号码。
如何在核心数据中执行此操作?有没有办法让用户手动将新属性添加到实体并选择其格式?什么是最好的方法?感谢。
答案 0 :(得分:1)
使用Core Data无法完全满足您的需求。核心数据不能改变结构,除非您制作新版本的设计,但是在xcode中这样做。
但您可以轻松添加另一个名为f.ex的表。信息,链接到人员单一连接,并将人员链接回信息表。
这样,您可以根据需要添加任意数量的字段和值,当然,您添加的所有额外字段都将跟随同一个人,因此如果您要使用cellPhone字段,则必须将其添加到所有字段。
我建议您使用直接SQL,不要使用Core Data。 Core Data不是一个数据库,它是一个对象存储,当你在iOS开发中变得更好时,你会理解它的差异,它比你最初想象的要大得多。
有一个优秀的SQLite高级库,名为FMDB,你可以在github上找到它:https://github.com/ccgus/fmdb
在这里你可以直接进行像“Alter Table”这样的SQL查询以及更多的动态,虽然你所追求的并不是很简单,但它可能是一个非常有趣的项目。
祝你好运。
答案 1 :(得分:0)
我不认为这在Core Data中是直接可行的,因为它的目的是对象持久性,并且您无法动态地向对象添加新属性。它可以在某种程度上伪造,使用与具有name
,value
(作为字符串)和data type
字段的“额外属性”实体的多对多关系。
我相信您最好的选择是使用SQLite来动态修改表结构。 (http://www.sqlite.org/lang_altertable.html)
答案 2 :(得分:0)
我上一家公司做过这样的事情,但这不是一件轻而易举的事。我无法访问代码,因此这或多或少来自内存。
您在实体中提供可转换的属性(将是字典)
模型对象必须为此提供getter和setter,然后驱动基本方法来设置/获取属性
你提供了一个沿-objectForKey和-setObject forKey行的getter / setter,它们读写值
当您被告知'错误'时,您更新实体中的字典
总之,维护一个键值对的字典。也许你维护一个阴影字典,可以根据需要进行初始化和更新。自从我上次看到这段代码以来已经过了大约4年了。但你应该明白这个想法。这就像魔术一样 - 你可以任意设置任何键/值对(假设字符串键和NSCoding兼容值),并且总是可以通过向字典询问其当前键集来询问键。