如何修复“致命错误:无法索引空缓冲区” [英] How can I fix "fatal error: can't index empty buffer"

查看:180
本文介绍了如何修复“致命错误:无法索引空缓冲区”的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我尝试为文本字段开发自定义自动填充。代码可以工作,但是如果我删除了所有的输入,调试器会说:致命错误:无法对空缓冲区进行索引,在写入的行中: 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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆