如何在 coredata 中创建数据库视图

Posted

技术标签:

【中文标题】如何在 coredata 中创建数据库视图【英文标题】:How to create database view in coredata 【发布时间】:2018-11-20 23:54:51 【问题描述】:

我在核心数据中的实体中有很多字段(比如实体称为地址),例如街道、号码、城市和州。我希望用户输入一个文本字符串,以便应用程序在实体地址中搜索匹配的记录。我该怎么做?

我基本上想要一个生成的字段(搜索字段),它将是“数字、街道、城市、州”,并尝试找到一条记录,使该搜索字段包含输入字符串。我希望这个字段在它包含的任何字段(例如,“数字”、“街道”、“城市”、“州”)发生变化时自动更新。

我在 Google 上四处寻找,发现似乎很有希望的数据库视图 (https://en.wikipedia.org/wiki/View_(SQL))。但我找不到有关如何在核心数据中创建数据库视图的任何信息。谁能给我指个方向?谢谢!

【问题讨论】:

【参考方案1】:

您可以在您的 Address 类中创建一个计算属性并将其用于您的搜索。如果您更改它使用的任何属性,它将更新。

var fullAddress: String 
    return "\(number) \(street) \(city ?? "") \(state ?? "")"

(这里我假设城市和州是可选属性)

关于 Db 视图,Core Data 是 ORM 而不是 SQL 数据库,因此不存在视图之类的东西。

【讨论】:

这行得通。基本上这会将所有记录提取到内存中然后过滤它们,对吗? 每个加载到内存中的实例(记录)都会存在该属性,例如,您可以在循环中搜索它。【参考方案2】:

我不明白你的问题的某些部分,但我最初的想法:

我在核心数据的实体中有很多字段(比如实体是 称为地址),例如街道、号码、城市和州。我想要 用户输入文本字符串,以便应用程序搜索实体 匹配的记录的地址。我该怎么做?

我基本上想要一个生成的字段(搜索字段),它将 是“数字,街道,城市,州”并尝试找到这样的记录 此搜索字段包含输入字符串。我希望这个领域 当它包含任何字段时自动更新自身(例如, "number", "street", "city", "state") 变化。

将您的控制器(或其他对象)指定为 UITextField 的委托。覆盖最合适的委托方法,然后使用输入的字符串对核心数据模型执行获取查询。在回调中更新您的视图并使用最重要的结果。

我在 Google 上环顾四周,发现了 SQL 视图的东西 似乎很有希望。但我找不到任何有关如何创建 核心数据中的数据库视图。谁能给我指个方向?谢谢!

SQL 视图?你说的是数据库浏览器吗? DB Browser Lite 一直为我完成这项工作——它允许您浏览模式、数据并执行 SQL 查询。将模型的位置打印到控制台,然后使用 OS 文件浏览器导航到该位置。

在 Objective-C 中,控制台打印输出如下所示:

     - (NSURL *)applicationDocumentsDirectory 
        return [[[NSFileManager defaultManager] URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask] lastObject];
    

Xcode 没有 DB 查看器。您可能知道,当您选择 .xccdatamodelId 文件时,您可以轻松地在表视图中编辑实体及其属性。从该文件中,您可以在 Graph View 中检查整个模型及其关系,就像 UML 快照一样。

【讨论】:

如果地址表的架构包含多个列,如“street”、“Country”、“Province”,我不知道如何查询核心数据,因为用户只需输入一个字符串并输入在任何用户想要的。这是我指的数据库视图:en.wikipedia.org/wiki/View_(SQL) 类似:NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:@"Location"]; [请求 setPredicate:[NSPredicate predicateWithFormat:@"street == %@ OR country == %@", value, value]]; NSError *error = nil; NSArray *locations = [self.context executeFetchRequest:request error:&error]; 用户也可以在字符串中输入两个字段...但这绝对是一种方法。

以上是关于如何在 coredata 中创建数据库视图的主要内容,如果未能解决你的问题,请参考以下文章

如何跨视图传递 CoreData 对象

如何在 SwiftUI 中创建核心数据管理器环境

如何在一个类中创建 CoreData 实体并在另一个类中访问?

如何让用户在核心数据xcode中创建自己的属性

如何在MySQL中创建视图

如何在 Core Data 中创建数据模型?