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

问题描述 投票:0回答:2

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

ios core-data attributes
2个回答
2
投票

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

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


0
投票

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

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

enter image description here

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

© www.soinside.com 2019 - 2024. All rights reserved.