首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Swift Thread1: EXC_BAD_INSTRUCTION (code=EXC_I386_INVOP,subcode=0x0)

Swift Thread1: EXC_BAD_INSTRUCTION (code=EXC_I386_INVOP,subcode=0x0)
EN

Stack Overflow用户
提问于 2016-04-22 21:20:28
回答 1查看 903关注 0票数 0

有一个错误的SS

这发生在将刷新方法添加到viewDidLoad以进行拉到刷新之后。我使用parse.com,而追随者表是空的。

我发现了一些关于错误的问题。但我没有发现任何与我的问题相同的问题,或者我可能不明白。

我怎样才能解决这个问题?

代码语言:javascript
复制
import UIKit
import Parse

class TableViewController: UITableViewController {

    var usernames = [""]
    var userids = [""]
    var isFollowing = ["":false]

    var refresher: UIRefreshControl!

    func refresh() {

        var query = PFUser.query()

        query?.findObjectsInBackgroundWithBlock({ (objects, error) -> Void in

            if let users = objects {

                self.usernames.removeAll(keepCapacity: true)
                self.userids.removeAll(keepCapacity: true)
                self.isFollowing.removeAll(keepCapacity: true)

                for object in users {

                    if let user = object as? PFUser {

                        if user.objectId! != PFUser.currentUser()?.objectId {

                            self.usernames.append(user.username!)
                            self.userids.append(user.objectId!)

                            var query = PFQuery(className: "followers")

                            query.whereKey("follower", equalTo: (PFUser.currentUser()?.objectId)!)
                            query.whereKey("following", equalTo: user.objectId!)

                            query.findObjectsInBackgroundWithBlock({ (objects, error) -> Void in

                                if let objects = objects {

                                    if objects.count > 0 {

                                        self.isFollowing[user.objectId!] = true

                                    } else {

                                        self.isFollowing[user.objectId!] = false

                                    }
                                }

                                if self.isFollowing.count == self.usernames.count {

                                    self.tableView.reloadData()

                                    self.refresher.endRefreshing()

                                }


                            })



                        }
                    }

                }



            }



        })





    }



    override func viewDidLoad() {
        super.viewDidLoad()

        refresher = UIRefreshControl()
        refresher.attributedTitle = NSAttributedString(string: "Pull to refresher")
        refresher.addTarget(self , action: "refresh" , forControlEvents:  UIControlEvents.ValueChanged)
        self.tableView.addSubview(refresher)
        refresh()
            }

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

    // MARK: - Table view data source

    override func numberOfSectionsInTableView(tableView: UITableView) -> Int {
        // #warning Incomplete implementation, return the number of sections
        return 1
    }

    override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        // #warning Incomplete implementation, return the number of rows
        return usernames.count
    }



    override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCellWithIdentifier("cell", forIndexPath: indexPath) as! UITableViewCell
        cell.textLabel?.text = usernames[indexPath.row]
        let followedOnjectId = userids[indexPath.row]
        if isFollowing[followedOnjectId] == true {
        cell.accessoryType = UITableViewCellAccessoryType.Checkmark
        }
        return cell
    }

    override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
        var cell:UITableViewCell = tableView.cellForRowAtIndexPath(indexPath)!
        let followedOnjectId = userids[indexPath.row]

        if isFollowing[followedOnjectId] == false{
            isFollowing[followedOnjectId] = true

        cell.accessoryType = UITableViewCellAccessoryType.Checkmark

        var following = PFObject(className: "followers")
        following["following"] = userids[indexPath.row]
        following["follower"] = PFUser.currentUser()?.objectId

        following.saveInBackground()
        }else
        {
            isFollowing[followedOnjectId] = false
            cell.accessoryType = UITableViewCellAccessoryType.None
            var query = PFQuery(className: "followers")
            query.whereKey("follower", equalTo: PFUser.currentUser()!.objectId!)
            query.whereKey("following", equalTo: userids[indexPath.row])
            query.findObjectsInBackgroundWithBlock({ (objects, error) -> Void in
                if let objects = objects {
                    for objects in objects {
                    objects.deleteInBackground()
                    }
                }

            })


        }
    }

}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-04-22 21:30:57

代码语言:javascript
复制
(PFUser.currentUser()?.objectId)!

或者查询-var为零。这就导致了异常。

您可能应该使用if let结构。

代码语言:javascript
复制
if let objectId = PFUser.currentUser()?.objectId {
    query.whereKey("follower", equalTo: objectId)
}

或者,当所有的值都存在时,如果应该只执行代码,则可以使用guard关键字。

代码语言:javascript
复制
guard let a = optionalType?.variable?.a, b = optionalType?.variable?.b else { return }
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36803492

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档