我正在尝试构建一个 Swift 应用程序,它将查询我的 API 服务器以获取与食物相关的数据......因为有很多不同的食物可用,我只想在用户选择时将图像存储在设备上这样做。为此,我尝试使用SVGKit来侧载 SVG 图像。为了存储它们,我想使用 Core Data。我还使用SwiftyJSON来解析传入的数据。免责声明:我是 Swift 和 iOS 开发的新手。
我已经设置了 SVGKit,关于我的请求的所有其他内容似乎都可以正常工作(数据确实返回成功,并且我在存储除 SVGKImage 之外的所有内容时没有任何问题)。
以下是在函数内部并且已经有一个托管对象上下文:
var request = NSMutableURLRequest(URL: NSURL(string: "\(apiImageURLBase)/\(query)")!)
NSURLConnection.sendAsynchronousRequest(request, queue: NSOperationQueue.mainQueue()) { (response: NSURLResponse!, data: NSData!, error: NSError!) -> Void in
let retrievedData = JSON(data: data, options: nil, error: nil)
if let imageName = retrievedData["name"].string {
let imageSVGData = retrievedData["data"].string
let imageColor = UIColor(hexString: retrievedData["color"].string)
let svgParse: SVGKParser = SVGKParser(source: SVGKSource(inputSteam: NSInputStream(data: imageSVGData!.dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: false)!)))
svgParse.addDefaultSVGParserExtensions()
let imageSVG = SVGKImage(parsedSVG: svgParse.parseSynchronously(), fromSource: nil)
FoodImage.createInManagedObjectContext(managedObjectContext!, name: imageName, added: NSDate(), image: imageSVG, color: imageColor!)
}
}
这就是我设置托管对象及其保存方法的方式:
class FoodImage: NSManagedObject {
@NSManaged var name: String
@NSManaged var added: NSDate
@NSManaged var image: SVGKImage
@NSManaged var color: UIColor
class func createInManagedObjectContext(context: NSManagedObjectContext, name: String, added: NSDate, image: SVGKImage, color: UIColor) -> NSManagedObject {
let entity = NSEntityDescription.entityForName("FoodImage", inManagedObjectContext: context)
let item = FoodImage(entity: entity!, insertIntoManagedObjectContext: context)
item.name = name
item.added = added
item.image = image
item.color = color
if !context.save(nil) {
println("Could not save.")
}
return item
}
}
我遇到的问题是在if !context.save(nil)
我执行保存时出现以下错误:
-[SVGKImage encodeWithCoder:]:无法识别的选择器发送到实例 0x16eea720
*** -[NSKeyedArchiver dealloc]:警告:NSKeyedArchiver 在没有调用 -finishEncoding 的情况下被释放。
*** 由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因:“-[SVGKImage encodeWithCoder:]:无法识别的选择器发送到实例 0x16eea720”
我真的对内存分配知之甚少,无法诊断这一点,我最初的想法是 Swift 处理了大部分分配?无论如何,如果有人知道我能做些什么来解决这个问题,我将不胜感激!