以编程方式在运行时删除或添加属性到CoreData

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了以编程方式在运行时删除或添加属性到CoreData相关的知识,希望对你有一定的参考价值。

我必须根据Objective C中的api响应创建和删除属性。例如,现在我的api响应包含字段“facebook”,“whatsapp”和“viber”。但是将来响应可以添加“youtube”。基于此响应,我必须删除实体“社交”的所有属性和值,并立即创建四个属性并设置值。如何以编程方式执行此操作?因为默认的* .xcdatamodeld文件无法帮助我,对吧?注意:我的项目是客观的C.

答案

应用程序启动时数据模型是可变的 - 您可以在代码中完全构建模型,而不是使用模型编辑器。但是只要加载持久性存储文件,就必须将模型视为已修复。加载持久存储后的任何更改都将导致崩溃。这意味着在调用loadPersistentStores(completionHandler:)addPersistentStore(with:completionHandler:)之前必须进行任何更改。

亚历山大对可选属性的建议很好。如果您需要更加动态的模型,则需要创建一个新的相关实体,该实体将存储服务名称以及您需要保存的有关服务的任何信息。如果你这样做,你的Social实体将与一个名为Service的新实体有很多关系。 Service将有一个名为name的字符串属性,其值将包含twitter,facebook,youtube等。它还具有您需要保存的有关服务的其他任何属性。

另一答案

您可以提前创建所有4个字段,只需将它们作为可选项,并根据服务器响应填充它们。但是您无法在运行时添加新属性。你的*.xcdatamodeld文件编译成*.momd,它包含在数据库中创建表的所有数据,因为默认情况下Core Data与SQLite一起工作,它是一个关系数据库管理系统。

要使属性可选,您应该检查它。

enter image description here

然后新创建的对象包含nil作为对象属性的默认值。因此,在您的情况下,Social对象的“youtube”属性将只是nil

以上是关于以编程方式在运行时删除或添加属性到CoreData的主要内容,如果未能解决你的问题,请参考以下文章

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

将 NSSegmentedControl 与 CoreData 一起使用

以编程方式检查核心数据实体是不是被索引

核心数据:无法将持久存储添加到协调器

为啥更改实体的属性时会删除我的 CoreData 信息?

添加新属性时,CoreData 无法完成错误