macos - 核心数据和用户定义的属性

标签 macos cocoa core-data

我有一个应用程序,它最终是一个数据库程序。目前,我正在使用“元素”对象的 NSMutableArray,该对象具有几十个预定义属性和一个属性,该属性是一个可变字典,用于用户定义的属性(在运行时定义)。

为此,我使用 valueForUndefinedKey: ,它会在“用户字段”可变字典中进行查找。这一切都运行得很好,并允许我基于内置属性和用户定义的属性构建谓词。

我正在考虑将其移动到核心数据,但无法确定允许用户定义属性(核心数据中的属性)的方法。我可以创建一个可转换属性,它是一个字典,用户可以向其中添加键/值,但无法搜索它。

我还认为我的内置属性/属性可以在核心数据中完成,然后一个单独的非核心数据数组可以保存我的用户定义字段的字典(基本上与现在的方式相同)。这会有效吗?

我有一个 NSTableView,它必须显示来自内置字段以及用户定义字段(使用绑定(bind))的列,并且我需要能够构建也包含这两种类型的谓词。

例如,我的元素是“Person”,内置属性是姓名、生日、电话号码等,然后用户可以向这些属性添加字段,例如“品牌、型号、信用评分”等。

当我的应用程序必须允许创建用户定义的字段/属性/属性,同时仍然保持它们可通过用户构建的谓词进行搜索时,我不确定 Core Data 是否适合这种情况。

最佳答案

您是否考虑过定义一个实体来存储用户定义的键/值对?像这样的东西:

enter image description here

这将允许您继续使用谓词来查询数据,例如:

let request = NSFetchRequest<Person>(entityName: "Person")
request.predicate = NSPredicate(format: "userDefined.key == %@", "somekey")

或者基于值或数据类型的查询:

request.predicate = NSPredicate(format: "userDefined.value == %@", "somevalue")
request.predicate = NSPredicate(format: "userDefined.dataType == %@", "String")

您可以继续在 UserDefined.value 上使用可转换类型或二进制类型,并使用 dataType 作为如何转换/解码数据的提示。

关于macos - 核心数据和用户定义的属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61113587/

相关文章:

macos - OS X 共享内存清理

objective-c - NSScrollView 剪辑文档 View 而不是允许它滚动

cocoa - 从 MAC OS X 应用程序中提取信息

XCode 上的 mySQL 到核心数据

objective-c - 核心数据多对多关系的正确删除规则?

ios - CoreData 可以工作,但在控制台中又返回一个 nil 对象?

objective-c - OS X 10.10.3 和通知中心

macos - 苹果操作系统 : Install vue cli does work properly

c - pthread_cond_wait() 和信号,结果取决于操作系统

objective-c - 初始化WithFrame : method for custom textfield not being called when created in a TableCellView