2016-09-06 19 views
0

Firebase Storageから画像をTableViewに取り込むのに苦労しています。助けをお待ちしています。以下は私のコードです:Swift TableViewのFirebase Storageから画像を取得する

tableviewcellコード:

class HomeFeedCell : UITableViewCell { 

    Var feeds = [HomeFeed]() 
    var dbRef :FIRDatabaseReference! 
    var storage : FIRStorage! 


    @IBOutlet weak var Name: UILabel! 
    @IBOutlet weak var Location: UILabel! 
    @IBOutlet weak var Type: UILabel! 

    @IBOutlet weak var FeedImage: UIImageView! 

    func configureCellWith(product : HomeFeed) 
    { 
     Name.text? = product.name 
     Location.text? = product.location 
     Type.text? = product.type 

     func setSelected(selected: Bool, animated: Bool) { 
      super.setSelected(selected, animated: animated) 
     } 

     // Configure the view for the selected state 
    } 

} 

私のテーブルビュー:私は成功した名前、場所、およびタイプの詳細を表示することができるよ、私はちょうどよ

override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 
    let cell = tableView.dequeueReusableCellWithIdentifier("Cell1", forIndexPath: indexPath) as! HomeFeedCell 

    let details = feeds[indexPath.row] 

    cell.configureCellWith(details) 

    return cell 
} 

イメージを取得することに固執します。以下は私の構造体ファイルです:(セルに渡された名前、またはいくつかの他に基づいて、テーブルビューセル内

ダウンロード:

struct HomeFeed { 

    let key:String! 
    let name:String! 
    let location:String! 
    let review:String! 
    let type:String! 
    let photoURL:String 

答えて

1

あなたがこのような何かをしたいと思う可能性があります一意の識別子):詳細については

// Create a storage reference from the URL 
    let storageRef = storage.reference("name/of/my/object/to/download.jpg") 
    // Download the data, assuming a max size of 1MB (you can change this as necessary) 
    storageRef.dataWithMaxSize(1 * 1024 * 1024) { (data, error) -> Void in 
    // Create a UIImage, add it to the array 
    let pic = UIImage(data: data) 
    FeedImage.image = pic 
    }) 

Zero to App: Develop with Firebaseを見て、それがこれを行う方法の実用例えば、associated source codeです。

0

ありますが、非同期と同期し、URLからあなたの画像を得ることができる2つの方法があり、両方とも私は

同期し、使用して説明している:

if let filePath = Bundle.main.pathForResource("imageName", ofType: "jpg"), image = UIImage(contentsOfFile: filePath) 
{ 
    imageView.contentMode = .scaleAspectFit 
    imageView.image = image 
} 

を非同期:

func getDataFromUrl(url: URL, completion: ((data: Data?, response: URLResponse?, error: NSError?) -> Void)) { 
URLSession.shared.dataTask(with: url) { 
    (data, response, error) in 
    completion(data: data, response: response, error: error) 
}.resume() 
} 

は、画像をダウンロードするためのメソッドを作成し、あなたのURLから画像データを取得するために、完了ハンドラでメソッドを作成します(タスクを開始)

func downloadImage(url: URL){ 
print("Download Started") 
getDataFromUrl(url: url) { (data, response, error) in 
    guard let data = data where error == nil else { return } 
    DispatchQueue.main.async() {() -> Void in 
     print(response?.suggestedFilename ?? url.lastPathComponent ?? "") 
     print("Download Finished") 
     self.imageView.image = UIImage(data: data) 
    } 
} 
} 

用途:

override func viewDidLoad() { 
super.viewDidLoad() 
print("Begin of code") 
if let checkedUrl = URL(string: "http://www.apple.com/euro/ios/ios8/a/generic/images/og.png") { 
    imageView.contentMode = .scaleAspectFit 
    downloadImage(url: checkedUrl) 
} 
print("End of code. The image will continue downloading in the background and it will be loaded when finished.") 
} 

希望すると、これが役立ちます。

関連する問題