0

ファイアーベースデータベースとストレージを使用して画像とその説明を保持しています。現時点では、8つのイメージと8つの説明があるようにコード化されています。私はそれを得る方法を試してみたいと思っているので、ユーザが4つの画像を選択して4つの説明に入れれば、それを返すことができます。それは8でうまく動作しますが、4を追加して、そのテーブルを選択すると、5番目の写真のvarに何も格納されていないというエラーが発生してクラッシュします。ファイヤーベースの要素がコール、iOS、スウィフトに存在しない可能性があります

以下は、テーブルのデータを呼び出すときにクラッシュするコードです。

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はnilまたは無効ですが、質問に含まれるコードでは十分なコンテキストが提供されていません。 _imageUrl5はどのように設定されていますか?あなたのFirebaseコードはどこですか?構造はどのように見えますか? – Jay

+0

あなたの返事ありがとう@jay、この例ではimageUrl5は入力されていません。ユーザーは写真4枚のみです。写真のHTMLアドレスは5番には作成されません。5枚以上の写真が選択された場合にのみ作成されます。これは私が解決する必要があるものです。 FirebaseにimageUrl5がない場合、どのようにしてnilか存在しないかを確認して、それを設定しようとしません。私はimageUrl5!= nilを使用しようとするが、nilのためのオプションの文字列チェックでは常にtrueを返すという警告が表示されます。上記のコードを更新してより多く表示する –

+0

変数を定義する必要がある場合は、* private var _imageUrl1:String!*にすることはできません。オプションの場合* private var _imageUrl1:String?*これは可能であり、さまざまな方法でnilをテストできます。 – Jay

答えて

1

は我々だプライベートVARとポストクラスを持っている例を経由して、おそらくその答えオプション - それは値または共同を含むことができることを意味するuldはゼロです。これは文字列で示されていますか?

外部の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ありがとうございます。あなたの2番目のコメントで、私は使っていたことを考え出しました!の代わりに ?しかし、私は2番目を追加する場所に問題がありましたか?エラーは私に明らかに働かないポストクラスでそれをアンラップするオプションを与えていました。私はこのことについてあなたの時間と忍耐を感謝し、これは数日間の余計な頭痛を解決しました。私はいくつかのことを試みましたが、このガイダンスは多くの助けを借りて問題を解決するだけでなく、それは私にとって非常に貴重です。どうもありがとうございます! –

関連する問題