Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
UITable UITextField未正确显示数据SWIFT 3.0_Swift - Fatal编程技术网

UITable UITextField未正确显示数据SWIFT 3.0

UITable UITextField未正确显示数据SWIFT 3.0,swift,Swift,我的应用程序代码非常长,所以我想尝试解决这个问题,而不必显示一堆代码…但下面是正在发生的事情 我有一个动态单元格的tableview,所有设置都很好。单元格中有一个文本字段。将数据输入文本字段后,它将被发送到同一单元格内的标签。按下“完成”按钮时会发生这种情况。所有这些都可以找到,直到我将大约6行添加到表中。在这一点上,当按下“完成”按钮时,所有数据都会混淆。有时数据被发送到错误的单元格标签,而有时则根本不发送。只有当我到达大约6排时才会发生这种情况。我很困惑。单元格是基于核心数据实体显示的。计

我的应用程序代码非常长,所以我想尝试解决这个问题,而不必显示一堆代码…但下面是正在发生的事情

我有一个动态单元格的tableview,所有设置都很好。单元格中有一个文本字段。将数据输入文本字段后,它将被发送到同一单元格内的标签。按下“完成”按钮时会发生这种情况。所有这些都可以找到,直到我将大约6行添加到表中。在这一点上,当按下“完成”按钮时,所有数据都会混淆。有时数据被发送到错误的单元格标签,而有时则根本不发送。只有当我到达大约6排时才会发生这种情况。我很困惑。单元格是基于核心数据实体显示的。计数…文本字段将委托设置为自身…我不知道是什么导致了这一情况…仅在6行之后

提前感谢您的帮助…正如我所说,我希望尽量避免在这里粘贴我的代码,但如果我必须提供一些,我会或者我可以告诉您我的代码中发生了什么

编辑

下面是我在cellForRowAt中处理单元格内容中文本字段的一些代码

if searchResults.count > 1 {
        if showInGrams {
            if foods[indexPath.row].units != "g" && foods[indexPath.row].units != "grams" && foods[indexPath.row].units != "Grams" {
                if cell.changeServingTextField.text == "" {
                    cell.labelServing.text = String(format: "%0.2f", (100 / foods[indexPath.row].coefficient) * searchResults[indexPath.row].doubleValue)
                    cell.labelUOM.text = "grams"
                } else {
                    if cell.changeServingSegmentedControl.selectedSegmentIndex == 0 {
                        cell.labelServing.text = String(format: "%0.2f", Double(cell.changeServingTextField.text!)!)
                        cell.labelUOM.text = cell.changeServingSegmentedControl.titleForSegment(at: 0)
                        //show default values
                    } else {
                        cell.labelServing.text = String(format: "%0.2f", Double(cell.changeServingTextField.text!)!)
                        cell.labelUOM.text = cell.changeServingSegmentedControl.titleForSegment(at: 1)
                    }
                }
            } else {
                if cell.changeServingTextField.text == "" {
                    cell.labelServing.text = String(format: "%0.2f", searchResults[indexPath.row].doubleValue * foods[indexPath.row].serving)
                    cell.labelUOM.text = "grams"
                }
            }
        } else {
            if cell.changeServingTextField.text == "" {
                cell.labelServing.text = String(format: "%0.2f", searchResults[indexPath.row].doubleValue * foods[indexPath.row].serving)
                cell.labelUOM.text = foods[indexPath.row].units
            } else {
                if cell.changeServingSegmentedControl.selectedSegmentIndex == 0 {
                    cell.labelServing.text = String(format: "%0.2f", Double(cell.changeServingTextField.text!)!)
                    cell.labelUOM.text = cell.changeServingSegmentedControl.titleForSegment(at: 0)
                } else {
                    cell.labelServing.text = String(format: "%0.2f", Double(cell.changeServingTextField.text!)!)
                    cell.labelUOM.text = cell.changeServingSegmentedControl.titleForSegment(at: 1)

                }
            }
        }

我希望这会有所帮助,谢谢

您看到的是
UITableView
的重用策略的一个症状。您可能想做的是将在
UITextField
中输入的信息存储在一个集合中,然后每当
tableView
重新加载时,您就从该集合中为当前
indexPath
选择并加载它。

您看到的是
UITableView
的重用策略的症状。您可能要做的是将在
UITextField
中输入的信息存储在一个集合中,然后每次
tableView
“重新加载”时,您都要从该集合中为当前
indexPath
选择并加载它。

这样的一行永远不会起作用:

if cell.changeServingTextField.text == ""
问题是细胞被重复使用。因此,在它以前的生命中,如果文本字段有文本,它仍然有文本,测试将失败


相反,您的逻辑需要完全基于这是哪一行以及与该行对应的数据是什么。它需要覆盖每一种情况,因为电池可以重复使用。

像这样的一行永远不会起作用:

if cell.changeServingTextField.text == ""
问题是细胞被重复使用。因此,在它以前的生命中,如果文本字段有文本,它仍然有文本,测试将失败


相反,您的逻辑需要完全基于这是哪一行以及与该行对应的数据是什么。它需要涵盖每一种情况,因为单元可以重复使用。

如果您将大部分逻辑移到单元中,事情就会更清楚。首先,可以将所有单元格的
IBOutlet
s
fileprivate
设置为私有,并将模型对象或字典指定为单元格的属性。这样,您就可以将创建单元格的逻辑与其显示分离,并防止您使用单元格的出口来确定状态


虽然这可能无法直接解决您的问题,但分离逻辑可能会明确查找的位置。

如果您将大部分逻辑移到单元格中,事情会更清楚。首先,可以将所有单元格的
IBOutlet
s
fileprivate
设置为私有,并将模型对象或字典指定为单元格的属性。这样,您就可以将创建单元格的逻辑与其显示分离,并防止您使用单元格的出口来确定状态


虽然这可能无法直接解决您的问题,但分离逻辑可能会澄清查找位置。

听起来好像您正试图使用单元格进行数据存储,却被缓存和重用的事实所困扰。一般来说,在“cellForRow…”方法之外不要对单元格的内容做任何操作,并完全从该方法内保存的数据进行配置,这样更安全。请发布与此问题相关的代码。找出出现问题的代码的最小数量也有助于找出根本原因。删除与当前问题无关的任何属性。继续,直到你有最少的代码显示问题。您可能会发现创建一个自己的新临时项目来调查此问题非常有用。谢谢您的回复。我所有的代码基本上都在方法cellForRow中…在单元格中使用这些文本字段很重要,因为很多情况都取决于它们是否为空…在这种情况下,您至少需要提供与更新标签相关的代码…在哪里发生,它如何获得要使用的值,我用一些代码编辑了我的文章,我希望它能帮助你听起来好像你在试图使用单元格来存储数据,并且发现它们被缓存和重用了。一般来说,在“cellForRow…”方法之外不要对单元格的内容做任何操作,并完全从该方法内保存的数据进行配置,这样更安全。请发布与此问题相关的代码。找出出现问题的代码的最小数量也有助于找出根本原因。删除与当前问题无关的任何属性。继续,直到你有最少的代码显示问题。您可能会发现创建一个自己的新临时项目来调查此问题非常有用。谢谢您的回复。我所有的代码基本上都在方法cellForRow中…在单元格中使用这些文本字段很重要,因为很多情况都取决于它们是否为空…在这种情况下,您至少需要提供与更新标签相关的代码…在哪里发生,它如何获得要使用的值,我用一些代码编辑了我的文章,我希望它能对工作有所帮助。怎么