我有一个应用程序,它最终是一个数据库程序。目前,我正在使用“元素”对象的 NSMutableArray,该对象具有几十个预定义属性和一个属性,该属性是一个可变字典,用于用户定义的属性(在运行时定义)。
为此,我使用 valueForUndefinedKey:
,它会在“用户字段”可变字典中进行查找。这一切都运行得很好,并允许我基于内置属性和用户定义的属性构建谓词。
我正在考虑将其移动到核心数据,但无法确定允许用户定义属性(核心数据中的属性)的方法。我可以创建一个可转换属性,它是一个字典,用户可以向其中添加键/值,但无法搜索它。
我还认为我的内置属性/属性可以在核心数据中完成,然后一个单独的非核心数据数组可以保存我的用户定义字段的字典(基本上与现在的方式相同)。这会有效吗?
我有一个 NSTableView,它必须显示来自内置字段以及用户定义字段(使用绑定(bind))的列,并且我需要能够构建也包含这两种类型的谓词。
例如,我的元素是“Person”,内置属性是姓名、生日、电话号码等,然后用户可以向这些属性添加字段,例如“品牌、型号、信用评分”等。
当我的应用程序必须允许创建用户定义的字段/属性/属性,同时仍然保持它们可通过用户构建的谓词进行搜索时,我不确定 Core Data 是否适合这种情况。
最佳答案
您是否考虑过定义一个实体来存储用户定义的键/值对?像这样的东西:
这将允许您继续使用谓词来查询数据,例如:
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/