我在cloudkit DB中有一个可选图像(已检查过数据库,如果我在测试中添加了图像,则会出现图像)。我创建了一个类,将记录字段初始化为我在tableview中使用的变量。我也有自定义单元格。但图像不会显示在我的自定义tableview单元格中。我不知道在tableview图像中是否有可选图像导致问题,或者我的代码/设置是否存在cloudkit问题。
任何帮助都非常感谢,因为我已经被困了一个多星期,而且网上几乎没有什么可以解决这个问题。
这是我的班级代码:
var feedResults = [UserPosts]()
class UserPosts {
var record: CKRecord
var description: String
var username: String
//var image: CKAsset? // tried also initializing the CKAsset separately
var postPic: UIImage?
init(record: CKRecord) {
self.record = record
self.description = record.objectForKey("description") as String
self.username = record.objectForKey("username") as String
// self.image = record.objectForKey("postPic") as? CKAsset
if var pic = record.objectForKey("postPic") as CKAsset! {
self.postPic = UIImage(contentsOfFile: pic.fileURL.path!)
// below is the other way I've seen it done.
// var url = pic.fileURL!
// var imageData = NSData(contentsOfFile: url.path!)
// self.postPic = UIImage(data: imageData!)
}
}
}
这是我的tableview代码:
override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCellWithIdentifier("Cell", forIndexPath: indexPath) as TableViewCell
let record = feedResults[indexPath.row]
cell.postDescription.text = record.description
cell.userName.text = record.username
if record.postPic != nil {
cell.postPic.image = record.postPic!
}
return cell
}
此外,我已经看到了将CKAsset拉入UIImage的几种方法。第一种方式,就是我看到Apple在他们的CloudKitAtlas项目中做到了这一点。虽然我不太熟悉Obj-C,但我认为我正确地遵循了它 - CloudKitAtlas Example
我也看到它使用NSData(contentOFFile :)和UIImage(数据:)完成,如这篇帖子所示:SO CKAsset Example
答案 0 :(得分:3)
尝试在没有.paths的情况下使用contentsOfURL。这就是我这样做的方法(在你的ifAs中为CKAsset):
if var data = NSData(contentsOfURL: pic!.fileURL) {
self.postPic = UIImage(data: data!)!
}
除此之外......你做了一个dequeueReusableCellWithIdentifier但是没有检查它是否返回nil。您应该创建一个新的单元格实例如果它是nil
答案 1 :(得分:1)
您可以像这样显示CKAsset中的图像:
var img = record.valueForKey("Picture") as? CKAsset
cell.imageView?.image = UIImage(contentsOfFile: img!.fileURL.path!)
希望这有帮助!