【问题标题】:Why won't my UIPickerView items display when I change @objc inference to off (on project I converted to Swift 4)?当我将@objc 推理更改为关闭时(在我转换为 Swift 4 的项目上),为什么我的 UIPickerView 项目不会显示?
【发布时间】:2018-11-26 00:36:12
【问题描述】:

这是我的应用程序在转换为 Swift 4.2(来自 3.x)后运行的部分快照。您可以看到我的 UIPickerView 中的项目确实正确显示。

但是,如果我更新项目并将 objc 推断更改为关闭(而不是打开)——XCode 建议更改此设置——然后我的 UIPickerView 不会显示这些项目,尽管它们包含在列表中。

UIPickerView 的快照似乎是空的

这是正在运行的应用程序,它显示了一个空的 UIPickerView,但正如您所见,我已选择删除一个项目。但是,在它后面你可以看到 UIPickerView 似乎是空的。

这是在 UIPickerView 中加载项目的基本代码

public func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int{
    if (siteKeyPickerValues != nil){
        return siteKeyPickerValues.count
    }
    return 0
}

public func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String?{
    if (siteKeyPickerValues != nil && siteKeyPickerValues.count > 0){
        return siteKeyPickerValues[row]
    }
    return nil
}

siteKeyPickerValues(字符串数组)已初始化

siteKeyPickerValues 似乎也已正确初始化。这里它在调试模式下运行,@objc inferenece 关闭:

【问题讨论】:

  • "并将 objc 推断更改为关闭(而不是打开)" 您应该将其更改为默认值,并且您应该确保您的视图控制器明确采用 UIPickerViewDataSource 和 UIPickerViewDelegate。
  • 是的,我确实将它更改为默认值,但这会导致同样的问题,我认为它正在将其设置为关闭(在 Swift 4 构建下),所以我只是这样写了这个问题。关键是除非明确设置为 on,否则它会失败。

标签: swift uipickerview inference


【解决方案1】:

以前(在 Swift 3.x 和以前版本的 XCode 下),我按以下方式设置了 MainControllerView,它工作正常:

class MainViewController: UIViewController, UIPickerViewDelegate, UITextFieldDelegate

在@matt 发表评论后,我简单地进行了一项更改并添加了UIPickerViewDataSource,如下所示:

class MainViewController: UIViewController, 
UIPickerViewDelegate, UIPickerViewDataSource, UITextFieldDelegate

我将@objc 推理设置为默认(或关闭)并运行程序,现在我在 UIPickerView 中看到了预期的项目。

这样就解决了问题。 我想知道这是最近发生的变化,还是刚刚发生过?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-05-16
    • 2018-12-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-27
    • 1970-01-01
    • 2017-05-26
    相关资源
    最近更新 更多