如何修复“致命错误:无法索引空缓冲区” [英] How can I fix "fatal error: can't index empty buffer"
问题描述
我尝试为文本字段开发自定义自动填充。代码可以工作,但是如果我删除了所有的输入,调试器会说:致命错误:无法对空缓冲区进行索引,在写入的行中: if createdArrayInDependencyOfInput [indexOfArray] == textFieldText& amp ; indexOfArray> = 0&&& currentCountOfInput> = 1
I try to develop a custom autocompletion for a textfield. The code works but if I delete all my input, the debugger says: "fatal error: can't index empty buffer" in the line where is written: if createdArrayInDependencyOfInput[indexOfArray] == textFieldText && indexOfArray >= 0 && currentCountOfInput >= 1
以下是整个代码:
@IBOutlet weak var MyTextField: UITextField!
@IBOutlet weak var MyPlaceholderTextField: UITextField!
var arrayOfSubjects: [String] = ["Informatik", "Italienisch", "Lateinisch", "Biologie", "Mathematik"]
var createdArrayInDependencyOfInput: [String] = []
var formerCountOfInput: Int = 0
var foundSubject: Bool = false
var indexOfArray: Int = 0
func printValue(value: Int) {
println("\(value)")
}
func convertStringOfArrayToAnArrayOfCharacters(array: [String], withIndex indexNumber: Int) -> [String] {
var arrayOfCharacters: [String] = []
if indexNumber <= array.count - 1 {
for character in array[indexNumber] {
var string = String(character)
arrayOfCharacters.append(string)
}
}
return arrayOfCharacters
}
@IBAction func MyTextFieldEditingChanged(sender: AnyObject) {
var currentCountOfInput: Int = countElements("\(MyTextField.text)")
var countOfRun: Int = 0
func backspaceWasPressed() -> Bool {
if currentCountOfInput < formerCountOfInput {
return true
}
else {
return false
}
}
func concatenateArrayOfCharactersToString(array: [String]) -> String {
var arrayForDelegate: [String] = [""]
var positionOfRun: Int = 0
if arrayForDelegate[0] == "" {
arrayForDelegate.removeLast()
}
while positionOfRun <= array.endIndex - 1{
arrayForDelegate.append(String(array[positionOfRun]))
positionOfRun += 1
}
while (arrayForDelegate.endIndex - 1) >= 1 {
arrayForDelegate[0] = arrayForDelegate[0] + arrayForDelegate[1]
arrayForDelegate.removeAtIndex(1)
}
if currentCountOfInput >= 1 {
return arrayForDelegate[0]
}
else {
return ""
}
}
while countOfRun < arrayOfSubjects.count {
if !backspaceWasPressed() {
var convertedStringInFormOfArrayOfStrings: [String] = convertStringOfArrayToAnArrayOfCharacters(arrayOfSubjects, withIndex: countOfRun)
if currentCountOfInput == 1 {
createdArrayInDependencyOfInput.append(convertedStringInFormOfArrayOfStrings[currentCountOfInput-1])
}
else if countOfRun >= 0 {
if countElements(arrayOfSubjects[countOfRun]) != countElements(createdArrayInDependencyOfInput[countOfRun]){
createdArrayInDependencyOfInput[countOfRun] = createdArrayInDependencyOfInput[countOfRun] + convertedStringInFormOfArrayOfStrings[currentCountOfInput-1]
}
}
countOfRun += 1
}
else if backspaceWasPressed() && createdArrayInDependencyOfInput != [] {
var convertedString: [String] = convertStringOfArrayToAnArrayOfCharacters(createdArrayInDependencyOfInput, withIndex: countOfRun)
if countElements(arrayOfSubjects[countOfRun]) > currentCountOfInput && currentCountOfInput >= 0 {
convertedString.removeLast()
}
createdArrayInDependencyOfInput[countOfRun] = concatenateArrayOfCharactersToString(convertedString)
countOfRun += 1
}
}
if countElements(createdArrayInDependencyOfInput[0]) == 0 {
createdArrayInDependencyOfInput.removeAll(keepCapacity: false)
}
while !foundSubject {
var textFieldText: String = MyTextField.text
if textFieldText.isEmpty {
createdArrayInDependencyOfInput.removeAll(keepCapacity: false)
}
if createdArrayInDependencyOfInput[indexOfArray] == textFieldText && indexOfArray >= 0 && currentCountOfInput >= 1 {
MyPlaceholderTextField.text = arrayOfSubjects[indexOfArray]
foundSubject = true
break
}
else {
MyPlaceholderTextField.text = ""
foundSubject = false
indexOfArray += 1
}
}
foundSubject = false
formerCountOfInput = currentCountOfInput
}
override func viewDidLoad() {
super.viewDidLoad()
MyTextField.becomeFirstResponder()
MyPlaceholderTextField.textColor = UIColor.lightGrayColor()
}
知道有人解决这个问题吗?
感谢您的关注!
Know anybody the solve for this problem? Thank You for Your attention!
推荐答案
该错误意味着 createdArrayInDependencyOfInput
为空。你在清除它之前给出错误的行:
That error means createdArrayInDependencyOfInput
is empty. You're clearing it just before the line that gives you the error:
if textFieldText.isEmpty {
createdArrayInDependencyOfInput.removeAll(keepCapacity: false)
}
这篇关于如何修复“致命错误:无法索引空缓冲区”的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!