我正在继承一个名为“Item”的Parse对象。以下所有内容均基于Parse文档:https://parse.com/docs/ios/guide#objects-subclasses
我正在尝试从Parse获取对象,只需添加一个名为thumbnailImage
的本地属性,类型为UIImage
。
This is my bridging header:
#ifndef My_Bridging_Header_h
#define My_Bridging_Header_h
#endif /* My_Bridging_Header_h */
#import <Parse/PFObject+Subclass.h>
这是我的“Item.swift”文件:
import UIKit
import Parse
class Item : PFObject, PFSubclassing {
override class func initialize() {
struct Static {
static var onceToken : dispatch_once_t = 0;
}
dispatch_once(&Static.onceToken) {
self.registerSubclass()
}
}
@NSManaged var thumbnailImage: UIImage
static func parseClassName() -> String {
return "Item"
}
}
最后,在我的viewController中,代码在"hello world"
行之后挂起:
let query = PFQuery(className: "Item")
query.whereKey("expired", equalTo: false)
query.findObjectsInBackgroundWithBlock({ (results, error) -> Void in
if error != nil {
print(error)
}
else {
self.itemsToDisplay.removeAll()
print(results!.count)
self.itemsToDisplay = results as! [Item]
for item in self.itemsToDisplay {
let downloadedItemThumbnailImage = item["thumbnailImage"] as! PFFile
do {
let downloadedItemThumbnailImageData = try UIImage(data: downloadedItemThumbnailImage.getData())
print("hello world")
//the problem line is below
item.thumbnailImage = downloadedItemThumbnailImageData!
print("now I am here!")
}
catch {
print("error with downloaded image data")
}
}
itemsToDisplay是[Item]
的数组,它是我的PFObject子类。
Xcode没有给我任何错误消息,但最终我确实得到了内存警告并且必须退出应用程序。不确定发生了什么。
为什么这不起作用:item.thumbnailImage = downloadedItemThumbnailImageData!
如何在子类PFObject上设置此本地属性?
最后,我在AppDelegate.swift文件的顶部注册了我的子类:
// Parse Register Subclasses
Item.registerSubclass()
答案 0 :(得分:1)
在子类化PFObject时,您不希望将UIImage直接作为属性。相反,把它变成PFFile。这允许您下载文件,然后获取图像数据。
如果你想在同一个类中完成所有操作,你可以下载文件,然后在不使用@NSManaged的情况下设置属性,但是,这可能不会提供任何好处,并将图像保存在内存中只要对象是。
答案 1 :(得分:0)
如果要使用Parse SDK将图像快速用作子类,则可以使用此解决方案。
import Parse
class Person: PFObject, PFSubclassing{
@NSManaged var name: String
@NSManaged var age: Int
@NSManaged var imageFile: PFFileObject!
class func parseClassName() -> String {
return "Person"
}
}
//By writing this function you can add your data to the server with image data
func addData(){
let person = Person()
person.name = "Muhammad ABBAS"
person.age = 21
let image = #imageLiteral(resourceName: "IMAGENAME") // Image litral
// if your image is .jpeg or .jpg then write this
person.imageFile = PFFileObject(data: image.jpegData(compressionQuality: 100)!)
person.saveInBackground { success, error in
if success{
print("Successfully Data Upload")
}else{
print("Not uploaded the data")
}
}
}
如果您的图片是.png,请写下
person.imageFile = PFFileObject(data: image.pngData()!)
代替
person.imageFile = PFFileObject(data: image.jpegData(compressionQuality: 100)!)