2016-09-06 73 views
0

Im努力从Firebase存储中将图像检索到TableView。感谢任何帮助。下面是我的代码:在Swift Table中从Firebase存储中恢复图像

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

有两种方法可以从网址让你的形象,异步和同步,这两个我都在下面的使用说明

同步方式:异步

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() 
} 

创建下载图像的方法(启动任务)

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.") 
} 

希望这会帮助你!