0

我正在使用Firebase数据库和存储来保存图像及其说明。目前我已经编码了8个图像和8个描述。我正在努力研究如何获得它,以便如果用户只选择4张图片并放入4个描述中,它允许回调。它与8正常工作,但是当我只添加4,并选择该表被称为它崩溃的错误,第5张照片变种不承载任何东西。Firebase元素可能不存在通话,iOS,Swift

下面是我用来调用表的数据和它崩溃的代码。

func configureCell(post: Post) { 
    self.post = post 
    self.carImages = [] 

    if post.imageUrl1 != "" { 
     self.carImages.append(post.imageUrl1) 
    } 
    if post.imageUrl2 != ""{ 
     self.carImages.append(post.imageUrl2) 
    } 
    if post.imageUrl3 != "" { 
     self.carImages.append(post.imageUrl3) 
    } 
    if post.imageUrl4 != "" { 
     self.carImages.append(post.imageUrl4) 
    } 
    if post.imageUrl5 != "" { 
     print ("Tony: \(post.imageUrl5)") 
     self.carImages.append(post.imageUrl5) 
    } 
    if post.imageUrl6 != "" { 
     self.carImages.append(post.imageUrl6) 
    } 
    if post.imageUrl7 != "" { 
     self.carImages.append(post.imageUrl7) 
    } 
    if post.imageUrl8 != "" { 
     self.carImages.append(post.imageUrl8) 
    } 

和碰撞吸能发生在imageUrl5

import Foundation 
import Firebase 

class Post { 




private var _imageUrl1: String! 
private var _imageUrl2: String! 
private var _imageUrl3: String! 
private var _imageUrl4: String! 
private var _imageUrl5: String! 
private var _imageUrl6: String! 
private var _imageUrl7: String! 
private var _imageUrl8: String! 

private var _postKey: String! 
private var _postRef: DatabaseReference! 
private var _photoInfo1: String! 
private var _photoInfo2: String! 
private var _photoInfo3: String! 
private var _photoInfo4: String! 
private var _photoInfo5: String! 
private var _photoInfo6: String! 
private var _photoInfo7: String! 
private var _photoInfo8: String! 




var profileImageUrl: String { 
    return _profileImageUrl 
} 

var imageUrl1: String { 
    return _imageUrl1 
} 
var imageUrl2: String { 
    return _imageUrl2 
} 
var imageUrl3: String { 
    return _imageUrl3 
} 
var imageUrl4: String { 
    return _imageUrl4 
} 
var imageUrl5: String { 
    return _imageUrl5 
} 
var imageUrl6: String { 
    return _imageUrl6 
} 
var imageUrl7: String { 
    return _imageUrl7 
} 
var imageUrl8: String { 
    return _imageUrl8 
} 


var postKey: String { 
    return _postKey 
} 



var photoInfo1: String { 
    return _photoInfo1 
} 
var photoInfo2: String { 
    return _photoInfo2 
} 
var photoInfo3: String { 
    return _photoInfo3 
} 
var photoInfo4: String { 
    return _photoInfo4 
} 
var photoInfo5: String { 
    return _photoInfo5 
} 
var photoInfo6: String { 
    return _photoInfo6 
} 
var photoInfo7: String { 
    return _photoInfo7 
} 
var photoInfo8: String { 
    return _photoInfo8 
} 

init(imageUrl1: String, imageUrl2: String, imageUrl3: String, imageUrl4: String, imageUrl5: String, imageUrl6: String, imageUrl7: String, imageUrl8: String, photoInfo1: String, photoInfo2: String, photoInfo3: String, photoInfo4: String, photoInfo5: String, photoInfo6: String, photoInfo7: String, photoInfo8: String) { 


    self._imageUrl1 = imageUrl1 
    self._imageUrl2 = imageUrl2 
    self._imageUrl3 = imageUrl3 
    self._imageUrl4 = imageUrl4 
    self._imageUrl5 = imageUrl5 
    self._imageUrl6 = imageUrl6 
    self._imageUrl7 = imageUrl7 
    self._imageUrl8 = imageUrl8 

    self._photoInfo1 = photoInfo1 
    self._photoInfo2 = photoInfo2 
    self._photoInfo3 = photoInfo3 
    self._photoInfo4 = photoInfo4 
    self._photoInfo5 = photoInfo5 
    self._photoInfo6 = photoInfo6 
    self._photoInfo7 = photoInfo7 
    self._photoInfo8 = photoInfo8 

} 

init(postKey: String, postData: Dictionary<String, AnyObject>) { 
    self._postKey = postKey 



    if let imageUrl1 = postData["imageUrl1"] as? String { 
     self._imageUrl1 = imageUrl1 
    } 
    if let imageUrl2 = postData["imageUrl2"] as? String { 
     self._imageUrl2 = imageUrl2 
    } 
    if let imageUrl3 = postData["imageUrl3"] as? String { 
     self._imageUrl3 = imageUrl3 
    } 
    if let imageUrl4 = postData["imageUrl4"] as? String { 
     self._imageUrl4 = imageUrl4 
    } 
    if let imageUrl5 = postData["imageUrl5"] as? String { 
     self._imageUrl5 = imageUrl5 
    } 
    if let imageUrl6 = postData["imageUrl6"] as? String { 
     self._imageUrl6 = imageUrl6 
    } 
    if let imageUrl7 = postData["imageUrl7"] as? String { 
     self._imageUrl7 = imageUrl7 
    } 
    if let imageUrl8 = postData["imageUrl8"] as? String { 
     self._imageUrl8 = imageUrl8 
    } 


    if let photoInfo1 = postData["photoInfo1"] as? String { 
     self._photoInfo1 = photoInfo1 
    } 
    if let photoInfo2 = postData["photoInfo2"] as? String { 
     self._photoInfo2 = photoInfo2 
    } 
    if let photoInfo3 = postData["photoInfo3"] as? String { 
     self._photoInfo3 = photoInfo3 
    } 
    if let photoInfo4 = postData["photoInfo4"] as? String { 
     self._photoInfo4 = photoInfo4 
    } 
    if let photoInfo5 = postData["photoInfo5"] as? String { 
     self._photoInfo5 = photoInfo5 
    } 
    if let photoInfo6 = postData["photoInfo6"] as? String { 
     self._photoInfo6 = photoInfo6 
    } 
    if let photoInfo7 = postData["photoInfo7"] as? String { 
     self._photoInfo7 = photoInfo7 
    } 
    if let photoInfo8 = postData["photoInfo8"] as? String { 
     self._photoInfo8 = photoInfo8 
    } 

    _postRef = DataService.ds.REF_POSTS.child(_postKey) 

} 
} 

Crash at 5th Image

Firebase Data

+0

显然_imageUrl5无效或无效,但包含在问题中的代码没有提供足够的上下文。 _imageUrl5如何填充?您的Firebase代码在哪里?结构是什么样子? – Jay

+0

感谢您的回复@jay,imageUrl5未在此示例中填充,当用户仅拍摄4张图片时,它不会为5号照片创建html地址,而只会在拍摄更多5张照片时创建一张。这是我需要解决的问题。如果Firebase没有将imageUrl5填充到我的代码中,那么我如何检查它是否存在,以便它不尝试填充它。如果我尝试使用,如果imageUrl5!=零,但我得到一个警告,非可选字符串检查为零将始终返回true。我更新了上面的代码以显示更多 –

+0

如果您定义了需要的变量* private var _imageUrl1:String!*,那么它永远不会为零。如果它是可选的* private var _imageUrl1:String?*那么它可以并且可以以各种方式对零进行测试。 – Jay

回答

1

也许通过一个例子

我们有一个职位类的私人VAR这是一个答案可选 - 意味着它可以包含一个值或合作伙伴没有。这是用字符串表示的?

当访问外部imageUrl1时,它可能会返回一个值或可能为零,表明。

class Post{ 
    private var _imageUrl1: String? 

    var imageUrl1: String? { 
     return _imageUrl1 
    } 

    init(url: String?) { //this could be nil! 
     self._imageUrl1 = url 
    } 
} 

let aPost = Post(url: "testUrl") 

if aPost.imageUrl1 != nil { 
    print(aPost.imageUrl1!) 
} 

//or the preferred way which unwraps the optional automatically 
if let aPostUrl = aPost.imageUrl1 { 
    print(aPostUrl) 
} else { 
    print("it was nil") 
} 

//here's a nil example 
let bPost = Post(url: nil) 
if let bPostUrl = bPost.imageUrl1 { 
    print(bPostUrl) 
} else { 
    print("it was nil") //prints it was nil 
} 
+0

谢谢@jay。有了你的第二条评论,我已经弄清楚了我正在使用!代替 ?但是我在添加第二个位置时遇到问题?这个错误让我可以选择在后期课堂上解开它,这显然不会奏效。我非常感谢你在这方面的时间和耐心,这解决了一些额外的头痛,我尝试了一些东西,但这个指导帮助了很多,不仅解决了问题,而且你认为我需要了解一些东西更多,这对我来说是无价的。非常感谢! –

相关问题