社交网络应用程序在返回行上给出错误

时间:2017-08-20 17:27:49

标签: ios swift firebase-realtime-database runtime-error social-networking

我正在最终确定我的社交媒体应用程序,并且在应用程序启动过程中我一直遇到与用户“用户名”相同的错误(应用正在运行,用户已登录,并且下一个视图控制器无法启动,它崩溃了EXC_BAD_INSTRUCTION}。

我认为这可能是adata基础问题,因为我使用了个人资料图片,但是,用户名在数据库中注册为具有电子邮件和密码的用户。

错误所在部分的代码:

import Foundation
import Firebase
import FirebaseDatabase

class Post {

private var _username: String!
private var _userImg: String!
private var _postImg: String!
private var _likes: Int!
private var _postKey: String!
private var _postRef: DatabaseReference!

var username: String
{
    return _username
}

var userImg: String
{
    return _userImg
}

var postImg: String {
    get {
        return _postImg
    } set {
        _postImg = newValue


    }
}

var likes: Int {
    return _likes
}

var postKey: String {
    return _postKey
}

init(imgURl: String, likes: Int, username: String, userImg: String) {
    _likes = likes
    _postImg = imgURl
    _username = username
    _userImg = userImg
}

    init(postKey: String, postData: Dictionary<String, AnyObject>){

    _postKey = postKey

    if let username = postData["username"] as? String {
        _username = username
    }

    if let userImg = postData["userImg"] as? String {
        _userImg = userImg
    }

    if let postImg = postData["imageUrl"] as? String{
        _postImg = postImg
        }
    if let likes = postData["likes"] as? Int {
        _likes = likes
        }
    _postRef = Database.database().reference().child("posts").child(_postKey)

}

func adjustLikes(addLikes: Bool) {

    if addLikes {

        _likes = likes + 1
    } else {

        _likes = likes - 1
    }

    _postRef.child("likes").setValue(_likes)
}

} 

发生错误的行:

return _username

我真的很困惑这个问题是什么。我查看了所有IBOutlets,以及删除和添加新用户。我将不胜感激任何帮助。

2 个答案:

答案 0 :(得分:0)

您的username变量是一个计算只读属性,它从变量_username:String!返回值(强制解包值意味着不能为nil else崩溃)。你需要确保你的变量不是零。

_username不是nil时的示例 -

class Foo{

    var _username:String = "tushar"
    var username: String
        {
                return _username
        }
}

var object = Foo()

print(object.username)

当您的变量可以获得nil值时的示例 -

class Foo{

    var _username:String!
    var username: String
        {  
                print(_username)
                return _username
        }
}

var object = Foo()
print(object.username)

如果变量没有值,那就是崩溃

答案 1 :(得分:0)

init(postKey:postData:)构造函数中,不保证将设置_username属性。但是,公共username属性属于非可选类型String。我的假设是username getter试图强行打开nil值。