UIPickerview 和 Core Data 有关系

Posted

技术标签:

【中文标题】UIPickerview 和 Core Data 有关系【英文标题】:UIPickerview and Core Data with relationship 【发布时间】:2015-12-29 17:51:18 【问题描述】:

我有两个实体,名为 Logbook(to-one-boats) 和 Boats(to-many-Logbook)。 当我在日志中注册新日志时,我有一个装满船的 UIPickerview。注册时一切正常。 但是,如果我打开一个已经注册的日志,从关系中在选择器视图中设置选定船的最佳做法是什么?现在我比较船名(字符串)并设置选定的。但我对此感到不舒服:) 我在 Swift 中编程

【问题讨论】:

不太确定我明白你的意思,但通常比较索引而不是字符串比较更好。所以你会比较你的 uiviewpicker 的索引和一些具有相同顺序的列表。 是的,我知道,我习惯在 fex sql 中使用索引。我是 Swift 编程和使用 Xcode 的新手。但据我所知,Core Data 中没有索引,uipickerview 每次选择只需要一个文本字符串。没有其他字段:) 【参考方案1】:

所以你想要做的基本上是有一种方法来根据UIPickerView 中的选择来识别核心数据条目。

当您获取所有核心数据条目时,您将它们作为列表获取,然后使用来自核心数据条目的字符串值填充您的选择器视图。

您应该做的是将这些获取的 coredata 条目作为 coredata 条目对象的列表存储在字段变量中,然后像现在一样填充您的选择器视图。这两个列表(coredata 和 pickerview 数据)现在应该具有相同的顺序(除非您出于某种原因更改了它们)。这意味着您可以根据从 pickerview 中选择的索引轻松识别 coredata 条目。由于您有一个 coredata 条目列表,您可以简单地更改您需要的任何字段并直接更新条目。您不需要根据条件查找条目,因为您已经准备好使用该条目。

如果您出于某种原因需要更改选择器视图中元素的顺序(例如按字母顺序),则您也需要重新排列 coredata 列表,或者在获取 coredata 条目时将排序添加为谓词第一名。

【讨论】:

非常感谢您的回答,我发现我的问题有点令人困惑 :) 让我问一些不同的问题。假设我正在使用带有两个表“Person”和“PostalCode”的 SQL 服务器。在“Person”中,我将有一个名为“postalCodeID”的字段,并根据我在下拉框中选择的内容将“PostalCode”中的 id 存储在该字段中。查看已存储的“人员”时,我可以针对下拉框中的值字段使用存储的“postalCodeID”来设置其初始选定值。所以我的问题是如何使用 Core Data 一个 UIPickerview 而不是下拉框来做到这一点。 :) 索引可以一直改变,我保存关系没有问题。问题是如何预先选择选择器视图:) 最好使用 coredata 的对象关系映射而不是传递 id 并且必须查找不同的对象。 code.tutsplus.com/tutorials/… 话虽如此,如果你采用这种方法,你最终会得到一个 PostalCode 对象(而不是 postalcodeid)。但是您需要从 PostalCode 表中获取所有行,使用该列表作为数据源,并预先选择您已经保存在 Person 对象上的对象。 是的,我知道这一点,并且我正在使用 Core Data 关系映射。我写的关于 id 的内容只是我试图从基于关系的数据库的角度来完成的一个例子,我非常了解...... :) 我仍然不明白我将如何能够预先选择 UIPickerview至尊只带字符串。我有一个带有 Person 的对象,以及一个所有 Postalcodes 按代码升序排序的对象。我用邮政编码填充 Pickerview。我也有一对一关系的存储对象。那么如何预选 UIPickerview...? 啊,好的。您需要遍历您设置为 uipickerview 数据源的列表项(所有邮政编码)。将选定的邮政编码(来自 personobject)与其中之一匹配,并提取索引。使用此索引,您将选定的行设置为:goo.gl/w7RmG6 对于您的原始问题,您应该将托管对象与objectId 属性进行比较,而不是比较字符串。这是比较 managedObjects 是否相等的首选方法。 goo.gl/fF3hSV

以上是关于UIPickerview 和 Core Data 有关系的主要内容,如果未能解决你的问题,请参考以下文章

UITableView 中的内联 UiPickerView

动态 UIPickerView 竞争条件?

如何在目标 C 中更改 UIPickerView 的宽度

将 Json 数组传递给 UIPickerView 不起作用

Core Data

使用 xcode 和 core-data 中的代码创建托管对象