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。有了你的第二條評論,我已經弄清楚了我正在使用!代替 ?但是我在添加第二個位置時遇到問題?這個錯誤讓我可以選擇在後期課堂上解開它,這顯然不會奏效。我非常感謝你在這方面的時間和耐心,這解決了一些額外的頭痛,我嘗試了一些東西,但這個指導幫助了很多,不僅解決了問題,而且你認爲我需要了解一些東西更多,這對我來說是無價的。非常感謝! –

相關問題