我构建了一个带有组合框的viewcontroller,它有一个完成选项,这样当我输入一个字母时,它会找到以该字母开头的列表中的第一个出现。它工作正常。然后我将代码复制到另一个视图控制器并更改了相应的源信息。它不起作用。我现在一直在比较两者,看看我是否错过了什么,这一切似乎都没问题。我已经发布了许多印刷语句来隔离问题。这是通过两个控制器运行的控制台日志:
// 1
completed string starting. Tag: 1
// 2
Starting findFirstOccurrence parm string: m
findFirstOccurrence dataRow: ["style_id": 61, "name": Ma (She's Making Eyes at Me), "id": 1040, "year_written": <null>, "year_published": <null>, "notes": <null>]
findFirstOccurrence returning: Ma (She's Making Eyes at Me)
objectValueForItemAt index: 1637
entry: Ma (She's Making Eyes at Me)
// 3
Entered textShouldEndEditing - tag: 1 selectedRow: 1637
// 4
initializeDialog creditRow: ["record_id": 485]
completed string starting. Tag: 1
// 5
Starting findFirstOccurrence parm string: m
findFirstOccurrence dataRow: ["other_instruments": <null>, "name": Maucha Adnet, "last_name": Adnet, "primary_instrument": vocals, "id": 2368, "first_name": Maucha, "birth_year": <null>, "death_year": <null>, "notes": <null>]
findFirstOccurrence returning: Maucha Adnet
// 6
Entered textShouldEndEditing - tag: 1 selectedRow: -1
我知道objectValueForItemAt在问题控制器中没问题,因为当我点击组合框上的向下箭头显示条目时,会反复调用它。
问题似乎是在问题控制器中没有调用objectValueForItemAt。我比较了故事板中的两个组合框。它们都设置相同。是否有某些设置我在某处丢失了?
这是两个控制器在分歧之前调用的最后一个函数。此版本来自问题控制器:
func comboBox(_ aComboBox: NSComboBox, completedString string: String) -> String? {
print("completed string starting. Tag: ", aComboBox.tag)
var returnString = ""
switch aComboBox.tag {
case artistTableTag:
returnString = findFirstOccurrence(table: artists.table, string: string)
default:
break
}
return returnString
}
func findFirstOccurrence(table: [[String: Any]], string: String) -> String {
print("Starting findFirstOccurrence parm string: ", string)
var returnString = ""
for var dataRow in table {
let dataString = dataRow["name"] as! String
if dataString.commonPrefix(with: string,
options: String.CompareOptions.caseInsensitive).lengthOfBytes(using: String.Encoding.utf8) ==
string.lengthOfBytes(using: String.Encoding.utf8) {
print("findFirstOccurrence dataRow: ", dataRow)
returnString = dataRow["name"] as! String
break
}
}
print("findFirstOccurrence returning: ", returnString)
return returnString
}
如果您只想知道只有一个条目的switch语句,那么源控制器有五个并选择保持一致。
答案 0 :(得分:0)
找到它。我有:
func comboBox(aComboBox: NSComboBox, indexOfItemWithStringValue string: String) -> Int {
而不是正确的:
func comboBox(_ aComboBox: NSComboBox, indexOfItemWithStringValue string: String) -> Int {
在Swift 3.0之前复制教程或stackoverflow答案时,我已多次遇到此问题。 Xcode捕获了大量过时的用法,但不是这种类型。如果未调用您的函数,请检查此项。我有一段时间没有遇到这个问题并且自满了。