2016-07-16 28 views
0

我是新來的編程和遇到從Parse中獲取圖像並將其放入圖像視圖的問題。我試圖調用'getDataInBackgroundWithBlock',但自動完成不顯示它。不能指定UIImage類型的值?鍵入PFFile?

class ListOfCategoriesViewController: UIViewController { 

@IBOutlet weak var tableView: UITableView! 

var categories: [DisplayCategory] = [] 


override func viewDidLoad() { 

    super.viewDidLoad() 

    // let queryCategories = DisplayCategory.query() 

    let titleQuery = PFQuery(className: "Category") 
    titleQuery.whereKeyExists("title") 
    let imageQuery = PFQuery(className: "Category") 
    imageQuery.whereKeyExists("imageCategory") 

    let query = PFQuery.orQueryWithSubqueries ([titleQuery, imageQuery]) 

    query.findObjectsInBackgroundWithBlock {(result: [PFObject]?, error: NSError?) -> Void in 

     self.categories = result as? [DisplayCategory] ?? [] 

     for category in self.categories { 
      do { 
       let data = try category.imageCategory?.getData() 

       category.imageCategory = UIImage(data: data!, scale:1.0) // compiler error here 
      } catch { 
       print("could not get image") 
      } 
     } 
    self.tableView.reloadData() 
    } 
    } 


override func didReceiveMemoryWarning() { 
    super.didReceiveMemoryWarning() 

} 

}

extension ListOfCategoriesViewController: UITableViewDataSource { 

func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 

    return categories.count 
} 

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 


    let cell = tableView.dequeueReusableCellWithIdentifier("CategoryCell") as! CategoryTableViewCell 

    cell.categoryImageView.image = categories[indexPath.row].imageCategory //compiler error here 

    return cell 
    } 
} 

DisplayCategory類看起來是這樣的。這個想法是用Parse中的文本和圖像顯示一個表格視圖單元格,所以我認爲創建靈活性而不是字典的新類是最好的選擇。

import Foundation 
import Parse 

class DisplayCategory: PFObject, PFSubclassing { 


@NSManaged var imageCategory: PFFile? 
@NSManaged var title: String? 

static func parseClassName() -> String { 
    return "Category" 
} 


override init() { 
    super.init() 
} 

override class func initialize() { 
    var onceToken : dispatch_once_t = 0; 
    dispatch_once(&onceToken) { 

     self.registerSubclass() 
    } 
} 

}

回答

0

解決的問題。使代碼更清晰,發現不需要分別獲取標題和圖像。增加了var imageCategory:UIImage?到DisplayCategory類。

import Foundation 
import UIKit 
import Parse 


class ListOfCategoriesViewController: UIViewController { 

@IBOutlet weak var tableView: UITableView! 

var categories: [DisplayCategory] = [] 


override func viewDidLoad() { 

    super.viewDidLoad() 

    let query = PFQuery(className: "Category") 

    query.findObjectsInBackgroundWithBlock { (result: [PFObject]?, error: NSError?) -> Void in 

     self.categories = result as? [DisplayCategory] ?? [] 
     print("received \(self.categories.count) categories from parse DB, now fetch individual images") 

     for category in self.categories { 
      print("fetch image for category: \(category.title)") 

      category.imageCategoryFile?.getDataInBackgroundWithBlock { (imageData: NSData?, error: NSError?) -> Void in 
       let image = UIImage(data: imageData!, scale: 1.0) 
       category.imageCategory = image 

       print("received image for category: \(category.title)") 
       self.tableView.reloadData() 
      } 
     } 
    } 
} 

override func didReceiveMemoryWarning() { 
    super.didReceiveMemoryWarning() 

} 

}

extension ListOfCategoriesViewController: UITableViewDataSource { 

func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 

    return categories.count 
} 

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 

    print("create cell for row: \(indexPath.row)") 

    let cell = tableView.dequeueReusableCellWithIdentifier("CategoryCell") as! CategoryTableViewCell 

    cell.categoryImageView.image = categories[indexPath.row].imageCategory 

    return cell 
} 

}

DisplayCategory類現在看起來是這樣的

import Foundation 
import Parse 

class DisplayCategory: PFObject, PFSubclassing { 


@NSManaged var imageCategoryFile: PFFile? 
@NSManaged var title: String? 
var imageCategory: UIImage? 

static func parseClassName() -> String { 
    return "Category" 
} 


override init() { 
    super.init() 
} 

override class func initialize() { 
    var onceToken : dispatch_once_t = 0; 
    dispatch_once(&onceToken) { 
     // inform Parse about this subclass 
     self.registerSubclass() 
    } 
} 

}

0

什麼是DisplayCategory類/對象看起來像?可能需要看到這一點。 也是在此期間,你可以嘗試讓你的圖像查詢獨立的,像這樣

let imageQuery = PFQuery(className:"Category") 
let image = imageQuery.objectForKey("imageFile")! as? PFFile { 
     image.getDataInBackgroundWithBlock({ 
      (imageData, error) -> Void in 
      if (error == nil) { 

//your for loop for setting the UIImage in DisplayCategory class/object here 

      category.imageCategory = UIImage(data:imageData!)! 

      } 
     }) 
    } 

來查詢解析您的「類別」類,並在「鏡像文件」欄檢索項

+0

新增DisplayCategory。如果你可以看看它,真的很感激。謝謝! –

相關問題