Swift - 在数组中调用随机值时出错

时间:2014-11-20 08:19:32

标签: ios swift nsarray pfobject

我试图将我的数组中的随机值调用到我的查询中,其中显示" objectId "但我收到"EXC_BAD_INSTRUCTION"的错误let votes = voteCount1["votes"] as Int。它低于我的IBAction功能addVote1

我哪里错了?我试图检索每个变量的值,这些变量都在我的Parse数据控制器中的某一行内(每个变量都有一个特定的objectId),然后对该行中的相应变量发送投票,但是我是得到一个错误。我没有得到错误的唯一方法是,如果我专门定义objectId代替它所说的位置" objectId "在query.getObjectInBackgroundWithId("objectId")。我哪里可能出错?

override func viewDidLoad() {
    super.viewDidLoad()
    // Do any additional setup after loading the view, typically from a nib.

    var voteCount1 = PFObject(className: "VoteCount")
    voteCount1["choices"] = 2
    voteCount1["votes"] = Int()
    voteCount1["votes2"] = Int()
    voteCount1["optionName"] = String()
    voteCount1["optionName2"] = String()

    var voteCount2 = PFObject(className: "VoteCount2")
    voteCount2["choices"] = 3
    voteCount2["votes"] = Int()
    voteCount2["votes2"] = Int()
    voteCount2["votes3"] = Int()
    voteCount2["optionName"] = String()
    voteCount2["optionName2"] = String()
    voteCount2["optionName3"] = String()

    var voteCount3 = PFObject(className: "VoteCount3")
    voteCount3["choices"] = 4
    voteCount3["votes"] = Int()
    voteCount3["votes2"] = Int()
    voteCount3["votes3"] = Int()
    voteCount3["votes4"] = Int()
    voteCount3["optionName"] = String()
    voteCount3["optionName2"] = String()
    voteCount3["optionName3"] = String()
    voteCount3["optionName4"] = String()

    let array = ["BiEM17uUYT", "TtKGatVCi9"]
    let randomIndex = Int(arc4random_uniform(UInt32(array.count)))
    let objectId = array[randomIndex]




}

override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
    // Dispose of any resources that can be recreated.
}

@IBOutlet weak var pollResults1: UILabel!

@IBAction func addVote1(sender: AnyObject) {
    var query = PFQuery(className: "VoteCount")
    query.getObjectInBackgroundWithId("objectId") {
        (voteCount1: PFObject!, error: NSError!) -> Void in
        if error != nil {
            NSLog("%@", error)
        } else {
            voteCount1.incrementKey("votes")
            voteCount1.saveInBackgroundWithTarget(nil, selector: nil)
        }
        let votes = voteCount1["votes"] as Int
        let votes2 = voteCount1["votes2"] as Int
        self.pollResults1.text = "\(votes)"
        }
    }
}

1 个答案:

答案 0 :(得分:0)

我在viewDidLoad中看到你定义了一些对象,将它们存储在局部变量中,并且当方法结束时它们的值会丢失。因此,他们不会以任何方式对查询和应该在解析数据库中的数据做出贡献。

那就是说,我希望对getObjectInBackgroundWithId的调用不返回匹配,并且voteCount1闭包参数为nil。

如果发生这种情况,您应该会在控制台上看到错误消息。

因此,异常发生是因为您正在访问包含voteCount1的{​​{1}}变量。您应该在nil分支中移动该代码:

else

但我认为你的代码逻辑中存在其他一些错误,这是基于我在这个答案开始时所做的考虑。