ios - swift: fatal error :在展开可选值 (lldb) 时意外发现 nil,线程 1

标签 ios swift

我在运行模拟器时一直收到这个 fatal error ,我不知道如何解决。我正在使用 Parse 创建一个模拟 Instagram 项目,由于某种原因,我收到一个 fatal error 和一个线程 1:

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

我知道这是一个常见问题,因为我查看了许多包含此 fatal error 的问题。但是,我对 Swift 编程还很陌生,所以我很困惑,如果有人能帮助我,我将不胜感激,谢谢!

import UIKit
import Parse

class TableViewController: UITableViewController {

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

override func viewDidLoad() {
    super.viewDidLoad()

    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()

                            }


                        })



                    }
                }

            }



        }



    })


}

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 Potentially incomplete method implementation.
    // Return the number of sections.
    return 1
}

override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    // #warning Incomplete method implementation.
    // Return the number of rows in the section.
    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 followedObjectId = userids[indexPath.row]

    if isFollowing[followedObjectId] == true {

        cell.accessoryType = UITableViewCellAccessoryType.Checkmark

    }


    return cell
}


override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {

    var cell:UITableViewCell = tableView.cellForRowAtIndexPath(indexPath)!

    let followedObjectId = userids[indexPath.row]

    if isFollowing[followedObjectId] == false {

        isFollowing[followedObjectId] = true

        cell.accessoryType = UITableViewCellAccessoryType.Checkmark

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

        following.saveInBackground()

    } else {

        isFollowing[followedObjectId] = 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 object in objects {

                    object.deleteInBackground()

                }
            }


        })



        }

    }
}

最佳答案

您可能没有以任何用户身份登录,因此 PFUser.currentUser() 返回 nil 并且当您强制解包时它会产生错误,因为您无法解包 nil 值.

首先检查是否有用户登录使用:

if let user = PFUser.currentUser(){
    println("User logged, lets do this")
    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 object in objects {
                object.deleteInBackground()
            }
        }
    })
} else {
    println("No user logged, ops!")
}

关于ios - swift: fatal error :在展开可选值 (lldb) 时意外发现 nil,线程 1,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30678934/

相关文章:

swift - 在 Swift 中使用 24 小时 DatePicker

python - runserver.py 在设置 MDM 服务器代码时给出模块错误

ios - 如何在 Swift 中更新 TableView 数据

ios - 如何使用仅适用于 iOS 14+ 且部署目标为 iOS 13 的 View 修饰符

ios - 试图了解 cellForRowAtIndexPath 和 heightForRowAtIndexPath 在处理 UITableViewCells 时如何工作

swift - 异步任务后返回数据

swift - 如何使用 CommonCrypto 在 Swift 中生成 RSA key ?

ios - 为导航标题设置图像在横向模式下无法正常工作

ios - 尝试通过解析在 UITableView 上显示数据

ios - 在 UICollectionViewCell iOS Swift 4 中注册 header 时出错