【问题标题】:Fatal error: Array index out of range (Parse/Swift)致命错误:数组索引超出范围(Parse/Swift)
【发布时间】:2015-10-30 12:27:26
【问题描述】:

我尝试从文件中我自己的数组运行它,但现在当我尝试从解析中获取它时,它给了我这个错误...... 即使我在方括号中输入一个数字,它也不起作用。

@IBOutlet weak var questionLabel: UILabel!
@IBOutlet weak var answerTF: UITextField!
var question : String! = ""
var answer : String! = ""
var objectIDArray = [String]()
var randomID = 0

override func viewDidLoad() {
    super.viewDidLoad()
    let objectIdQuery : PFQuery = PFQuery(className: "QuestionsAndAnswers")
    objectIdQuery.findObjectsInBackgroundWithBlock {
        (objects : [PFObject]? , error : NSError?) -> Void in

        var objectID = objects! as [PFObject]
        for i in 0..<objectID.count {
            self.objectIDArray.append(objectID[i].objectId!)
            self.callData()
        }
    }
    callData()
    // Do any additional setup after loading the view.
}

func getRandomObjectID() {
    randomID = Int(arc4random_uniform(UInt32(objectIDArray.count)))
}

func callData() {
    getRandomObjectID()
    let query : PFQuery = PFQuery(className: "QuestionsAndAnswers")
    query.getObjectInBackgroundWithId(objectIDArray[randomID]) "<- The error is pointing here" {
        (object : PFObject? , error : NSError?) -> Void in
        if error == nil {
            self.question = object!["Question"] as! String!
            self.answer = object!["Answer"] as! String!
            self.questionLabel.text = self.question

        } else {
            print(error)
        }
    }
}

【问题讨论】:

    标签: ios swift parse-platform


    【解决方案1】:

    我认为问题发生在这里:

    randomID = Int(arc4random_uniform(UInt32(objectIDArray.count)))
    

    当随机数为 3 时,示例数组有 3 个数字。

    你访问:objectIDArray(3) 它超出了范围,因为范围是 [0..2]。

    所以你把它改成:

    randomID = Int(arc4random_uniform(UInt32(objectIDArray.count - 1)))
    

    【讨论】:

    • 当我通过从 parse 复制 objectIds 并放入文件来设置数组时它工作正常,并且一切正常。但是当我尝试从服务器获取 objectIds 时,我不必在每次它开始给我这个错误时更新应用程序。另外,当我输入减一时,它给了我一个错误:(lldb)
    【解决方案2】:

    我知道了,我使用了 callData() 两次,一次在 for 循环中,另一次在它之外。愚蠢的错误......

    【讨论】:

      【解决方案3】:

      我猜可能的问题可能是这一行

      var objectIDArray = [String]()
      

      你不能用这种方式创建动态数组可能会占用大量内存。改用这条线试试

      var objectIDArray = [String](count: 40, repeatedValue: "")
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-08-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多