swift - 当我将 @objc 推理更改为关闭时(在我转换为 Swift 4 的项目上),为什么我的 UIPickerView 项目不会显示?
问题描述
这是我的应用程序在将其转换为 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 关闭:
解决方案
以前(在 Swift 3.x 和以前版本的 XCode 下),我用以下方式设置了 MainControllerView 并且它工作正常:
class MainViewController: UIViewController, UIPickerViewDelegate, UITextFieldDelegate
在@matt 发表评论后,我只是做了一个更改并添加了UIPickerViewDataSource
以下内容:
class MainViewController: UIViewController,
UIPickerViewDelegate, UIPickerViewDataSource, UITextFieldDelegate
我使用设置为默认(或关闭)的@objc 推理进行了重建并运行了程序,现在我在 UIPickerView 中看到了预期的项目。
这样就解决了问题。我想知道这是最近的变化,还是以前碰巧工作过?
推荐阅读
- assembly - 如何纯粹在 NASM 32 位汇编中对整数进行排序
- machine-learning - 如何获得每个 rfecv 分数的特征索引?
- java - 尝试全屏显示相机输出时无法查看完整图像
- angular - 如何下载 Base64 .docx 文件?
- java - 静态方法可以访问和修改java中的非静态字段吗?
- python - 如果循环将新值添加为一列而不是一列中的一行
- sql - 排除具有特定 ID 但在相关表中缺少该行的列中的值的行的正确语法是什么?
- java - 我们如何在 textview 中使用 HTML 为文本添加边框?
- reactjs - 使用 react 导入错误 firebase/firestore
- sql - 过滤并执行多个计算