我正在最终确定我的社交媒体应用程序,并且在应用程序启动过程中我一直遇到与用户“用户名”相同的错误(应用正在运行,用户已登录,并且下一个视图控制器无法启动,它崩溃了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,以及删除和添加新用户。我将不胜感激任何帮助。
答案 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
值。