저는 API 데이터 서버에 식품 항목과 관련된 데이터를 쿼리하는 Swift 앱을 작성하려고합니다 ... 사용 가능한 여러 가지 음식 품목이 많기 때문에 저장하고 싶습니다. 사용자가 선택했을 때 장치의 이미지. 이를 위해 SVG 이미지에서 측면로드에 SVGKit을 사용하려고합니다. 저장하려면 코어 데이터를 사용하고 싶습니다. 들어오는 데이터를 구문 분석하기 위해 SwiftyJSON도 사용하고 있습니다. 면책 조항 : 저는 Swift와 iOS 개발에 꽤 새로 왔습니다.SVGKit 이미지를 CoreData에 저장하려고합니다.
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:]: unrecognized selector sent to instance 0x16eea720
*** -[NSKeyedArchiver dealloc]: warning: NSKeyedArchiver deallocated without having had -finishEncoding called on it.
*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[SVGKImage encodeWithCoder:]: unrecognized selector sent to instance 0x16eea720'
정말 이걸 진단 할 수있는 메모리 할당에 대해 충분히 알지 못했고 초기 생각은 Swift가 대부분 할당을 처리 했습니까? 어쨌든, 내가 이것을 해결하기 위해 무엇을 할 수 있는지 아는 사람이라면 정말 고맙겠습니다!
FoodImage에 대한 데이터 모델에서 이미지 속성이 변형 가능 –