- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在 Realm 中创建了三个表,它们之间存在确定的关系(LBContests <-> LBQuizzes <-> LBLeaders),并且每个表都是多对多关系。这是为了表示排行榜,其中“LBContests”内有“LBQuizzes”的“LBLeaders”,并且 LBLeaders 包含用户名(为了简单起见,我省略了跟踪分数的其他字段详细信息作为示例)。
import Foundation
import RealmSwift
class LBContests: Object {
@objc dynamic var contestName: String = ""
let childrenLBQuizzes = List<LBQuizzes>()
}
class LBQuizzes: Object {
@objc dynamic var quizName: String = ""
let childrenLBLeaders = List<LBLeaders>()
var parentContest = LinkingObjects(fromType: LBContests.self, property: "childrenLBQuizzes")
}
class LBLeaders: Object {
@objc dynamic var userName: String = ""
var parentQuizzes = LinkingObjects(fromType: LBQuizzes.self, property: "childrenLBLeaders")
}
在了解了 racingName 和 quizName 的情况下,我试图确定如何在与 LBQuizzes(具有已知的 quizName)相关的 LBLeaders 中添加用户名,并进一步与 LBContests(具有已知的 racingName)相关。
我尝试过搜索、阅读、观看视频 - 但它们都是针对简单的一级或二级关系,而我需要处理三级关系。我只能将 LBQuizzes 附加到 LBContests.childrenLBQuizzes,但无法找到一种方法将 LBLeaders 记录附加到具有子 LBQuizzes 记录及其 childLBLeaders 记录的 LBContests 记录... (对于已知的竞赛名称和测验名称)
我知道我的部分问题是我不完全理解差异以及何时使用对象、结果和列表...我可以执行过滤器来获取结果,但我需要一个对象来引用子关系和/或附加记录...
有人可以吗:
识别 Swift Realm 代码以添加 LBLeader 记录(用户名)对于已知相关的 LBQuizzes 和 LBContests
提供一个概述如何、何时以及为何使用对象、结果和列表正确地
提供有关对象、结果和列表如何进行的见解可以一起使用或明确确定它们是否不能使用在一起(这是我的理解) - 你会得到结果和/或列表from 或 对象被过滤,但它们不是可从一种转换为另一种(即,您不能使用 Result 或像对象一样列出)
最佳答案
让我看看是否可以将它们整合在一起。
1) 您有一个已知的竞赛和一个已知的测验,并且您想在测验中添加新的 LB Leader。有几种方法可以解决这个问题,但这里有一个很长的答案:
首先,我设置了两个竞赛,其中竞赛 0 有两个测验,竞赛 1 有一个测验。将其打印到控制台结果
contest 0
quiz 0
quiz 1
contest 1
quiz 2
然后,假设我想添加一个新的 LBLeader John 来参加竞赛 0、测验 1。代码如下。
let knownContest = "contest 0"
let knownQuiz = "quiz 1"
let leaderToAdd = LBLeaders()
leaderToAdd.userName = "John"
let contestResults = realm.objects(LBContests.self).filter("contestName == %@", knownContest)
if let thisContest = contestResults.first {
let quizResults = thisContest.childrenLBQuizzes.filter("quizName == %@", knownQuiz)
if let thisQuiz = quizResults.first {
try! realm.write {
thisQuiz.childrenLBLeaders.append(leaderToAdd)
}
}
}
当打印相同的信息时,John 会被添加到竞赛 0、测验 1。
contest 0
quiz 0
quiz 1
John
contest 1
quiz 2
还有其他方法可以完成同样的事情(例如较短的答案)。例如,这一行返回相同的测验并利用逆关系
let quizResults = realm.objects(LBQuizzes.self).filter("quizName == %@ AND ANY parentContest.contestName == %@", knownQuiz, knownContest)
2) 对象、结果和列表是三个不同的 Realm 概念,Realm Documentation 中将详细介绍它们。 .
笼统地说:
Realm 对象是对象的单个实例,例如人或狗。 (有很多东西被认为是“Realm 对象”,但为了简洁起见,我们将对其进行限制)
Realm 结果(对象)是从 Realm 数据库返回的对象集。请记住,如我的第一个解决方案所示,首先返回了 racingResults,但随后我可以在 quizResults 中获取这些对象的子集。此外,Realm 结果是实时更新的 - 它们保持“附加”到数据库,以便当对象进入或离开结果范围时,结果始终反射(reflect)这一点。
列表是一个定义一对多关系的“容器”。与数组非常相似,并且具有许多相同的功能。一个人有很多狗,所以这将是一个列表的好用途,您似乎正在这样做。一个问题是 LinkingObjects 的逆关系。请注意它的 LinkingObjects(复数),因此如果您利用它,请记住它也意味着一只狗可以拥有很多人。优点是它会在写入数据时自动创建这些关系,但缺点是它不是单一的逆关系,因此您必须进行相应的编码(如我的示例中使用 .first )。
3)巨大的问题,并且在 SO 范围内无法真正回答,因为需要大量文档来解释所有这些交互。
一些值得思考的问题:
Primary Keys很多时候,使用关系可以使事情变得更加容易和更快,因为特定对象可以通过其唯一的主键来寻址,而不是依赖于对测验名称的查询。
例如,如果您的对象都有一个主键,则向特定测验添加新的领导者就变成了
class LBQuizzes: Object {
@objc dynamic var quiz_id = UUID().uuidString
然后您可以通过其 quiz_id 获取该特定对象并添加领导者。
let quizId = //whatever the primary key is of this quiz object
let quizObject = realm.object(ofType: LBQuizzes.self, forPrimaryKey: quizId)
try! realm.write {
quizObject?.childrenLBLeaders.append(leaderToAdd)
}
关于swift - Realm Swift 代码用于查询/添加具有关系的 3 个深表中的记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59914836/
我想做的是让 JTextPane 在 JPanel 中占用尽可能多的空间。对于我使用的 UpdateInfoPanel: public class UpdateInfoPanel extends JP
我在 JPanel 中有一个 JTextArea,我想将其与 JScrollPane 一起使用。我正在使用 GridBagLayout。当我运行它时,框架似乎为 JScrollPane 腾出了空间,但
我想在 xcode 中实现以下功能。 我有一个 View Controller 。在这个 UIViewController 中,我有一个 UITabBar。它们下面是一个 UIView。将 UITab
有谁知道Firebird 2.5有没有类似于SQL中“STUFF”函数的功能? 我有一个包含父用户记录的表,另一个表包含与父相关的子用户记录。我希望能够提取用户拥有的“ROLES”的逗号分隔字符串,而
我想使用 JSON 作为 mirth channel 的输入和输出,例如详细信息保存在数据库中或创建 HL7 消息。 简而言之,输入为 JSON 解析它并输出为任何格式。 最佳答案 var objec
通常我会使用 R 并执行 merge.by,但这个文件似乎太大了,部门中的任何一台计算机都无法处理它! (任何从事遗传学工作的人的附加信息)本质上,插补似乎删除了 snp ID 的 rs 数字,我只剩
我有一个以前可能被问过的问题,但我很难找到正确的描述。我希望有人能帮助我。 在下面的代码中,我设置了varprice,我想添加javascript变量accu_id以通过rails在我的数据库中查找记
我有一个简单的 SVG 文件,在 Firefox 中可以正常查看 - 它的一些包装文本使用 foreignObject 包含一些 HTML - 文本包装在 div 中:
所以我正在为学校编写一个 Ruby 程序,如果某个值是 1 或 3,则将 bool 值更改为 true,如果是 0 或 2,则更改为 false。由于我有 Java 背景,所以我认为这段代码应该有效:
我做了什么: 我在这些账户之间创建了 VPC 对等连接 互联网网关也连接到每个 VPC 还配置了路由表(以允许来自双方的流量) 情况1: 当这两个 VPC 在同一个账户中时,我成功测试了从另一个 La
我有一个名为 contacts 的表: user_id contact_id 10294 10295 10294 10293 10293 10294 102
我正在使用 Magento 中的新模板。为避免重复代码,我想为每个产品预览使用相同的子模板。 特别是我做了这样一个展示: $products = Mage::getModel('catalog/pro
“for”是否总是检查协议(protocol)中定义的每个函数中第一个参数的类型? 编辑(改写): 当协议(protocol)方法只有一个参数时,根据该单个参数的类型(直接或任意)找到实现。当协议(p
我想从我的 PHP 代码中调用 JavaScript 函数。我通过使用以下方法实现了这一点: echo ' drawChart($id); '; 这工作正常,但我想从我的 PHP 代码中获取数据,我使
这个问题已经有答案了: Event binding on dynamically created elements? (23 个回答) 已关闭 5 年前。 我有一个动态表单,我想在其中附加一些其他 h
我正在尝试找到一种解决方案,以在 componentDidMount 中的映射项上使用 setState。 我正在使用 GraphQL连同 Gatsby返回许多 data 项目,但要求在特定的 pat
我在 ScrollView 中有一个 View 。只要用户按住该 View ,我想每 80 毫秒调用一次方法。这是我已经实现的: final Runnable vibrate = new Runnab
我用 jni 开发了一个 android 应用程序。我在 GetStringUTFChars 的 dvmDecodeIndirectRef 中得到了一个 dvmabort。我只中止了一次。 为什么会这
当我到达我的 Activity 时,我调用 FragmentPagerAdapter 来处理我的不同选项卡。在我的一个选项卡中,我想显示一个 RecyclerView,但他从未出现过,有了断点,我看到
当我按下 Activity 中的按钮时,会弹出一个 DialogFragment。在对话框 fragment 中,有一个看起来像普通 ListView 的 RecyclerView。 我想要的行为是当
我是一名优秀的程序员,十分优秀!