Xcode UIPickerview和具有关系的核心数据

Xcode UIPickerview和具有关系的核心数据,xcode,swift,core-data,uipickerview,Xcode,Swift,Core Data,Uipickerview,我有两个实体,分别命名为航海日志(一艘船)和船只日志(多艘船日志)。 当我在日志簿中注册新日志时,我有一个UIPickerview,其中充满了船只。注册时一切正常。 但若我打开一个已经注册的日志,那个么在关系的选择器视图中设置所选船只的最佳实践是什么?现在我比较boatname(string)并设置所选的。但我觉得不舒服:) Im在Swift中编程,因此您需要做的基本上是基于UIPickerView中的选择来识别coredata条目 获取所有核心数据条目时,将它们作为列表获取,然后用coreda

我有两个实体,分别命名为航海日志(一艘船)和船只日志(多艘船日志)。 当我在日志簿中注册新日志时,我有一个UIPickerview,其中充满了船只。注册时一切正常。 但若我打开一个已经注册的日志,那个么在关系的选择器视图中设置所选船只的最佳实践是什么?现在我比较boatname(string)并设置所选的。但我觉得不舒服:)
Im在Swift中编程,因此您需要做的基本上是基于
UIPickerView
中的选择来识别coredata条目

获取所有核心数据条目时,将它们作为列表获取,然后用coredata条目中的字符串值填充pickerview

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


如果出于某种原因需要更改pickerview中元素的顺序(比如按字母顺序),那么您也需要重新排列coredata列表,或者,当您首先获取coredata条目时,只需添加排序作为谓词。

因此,您要做的基本上是基于
UIPickerView
中的选择来识别coredata条目

获取所有核心数据条目时,将它们作为列表获取,然后用coredata条目中的字符串值填充pickerview

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


如果您出于某种原因需要更改pickerview中元素的顺序(比如按字母顺序),那么您也需要重新排列coredata列表,或者在获取coredata条目时将顺序添加为谓词。

我不太清楚您的意思,但是比较索引通常比比较字符串要好。因此,您可以比较uiviewpicker的索引和一些具有相同顺序的列表。是的,我知道,我习惯在fex sql中使用索引。我是一个编程Swift和使用Xcode的新手。但据我所知,核心数据中没有索引,uipickerview只为每个选择获取一个文本字符串。没有其他字段:)我不太确定我理解你的意思,但通常比较索引比比较字符串要好。因此,您可以比较uiviewpicker的索引和一些具有相同顺序的列表。是的,我知道,我习惯在fex sql中使用索引。我是一个编程Swift和使用Xcode的新手。但据我所知,核心数据中没有索引,uipickerview只为每个选择获取一个文本字符串。没有其他领域:)我真的很感谢你的回答,我发现我的问题有点困惑:)让我问一点不同的问题。假设我使用的SQL server有两个表,“Person”和“PostalCode”。在“Person”中,我将有一个名为“postalCodeID”的字段,并根据我在下拉框中选择的内容将“PostalCode”中的id存储在该字段中。当查看已存储的“Person”时,我可以对dropdownbox中的值字段使用存储的“postalCodeID”来设置其初始选定值。所以我的问题是如何使用核心数据UIPickerview而不是dropdownbox来实现这一点:索引可以随时更改,并且我在保存关系方面没有问题。问题是如何预先选择选择器视图:)最好使用coredata的对象关系映射,而不是传递id并查找不同的对象。也就是说,如果采用这种方法,最终将得到一个PostalCode对象(而不是postalcodeid)。但是您需要从PostalCode表中获取所有行,使用列表作为数据源,并预选您已经保存在Person对象上的对象。是的,我知道这一点,我正在使用核心数据关系映射。我写的关于id的内容只是我试图从基于关系的数据库的角度来完成的一个例子,我非常清楚这一点…:)我仍然不知道如何才能预选一个只接受字符串的UIPickerview。我有一个带有Person的对象,还有一个带有按代码升序排列的所有Postalcodes的对象。我在Pickerview中填充了Postalcodes。我还存储了对象从到一的关系。那么我如何预选UIPickerview…?啊,好的。您需要循环设置为uipickerview(所有postalcodes)数据源的列表项。将所选postalcode(来自personobject)与其中一个匹配,并提取索引。使用此索引,您可以将所选行设置为:对于原始问题,您应该将managedobjects与
objectId
属性进行比较,而不是比较字符串。这是比较ManagedObject是否相等的首选方法。我真的很感谢你的回答,我发现我的问题有点困惑:)让我问一个问题