2016-01-06 30 views
0

我想用核心數據在swift中製作Transformable圖像。 我創建了可變形的imageA。 當我試圖看到數據庫中是否有圖像時,它告訴我們這裏沒有任何東西。 如何將圖像添加到數據庫?我的代碼有什麼問題? 這裏是我的代碼如何在swift中製作Transformable圖像?

我使用方法setImage 和getImage的地方保存和獲取適用於@NSManaged var isSet:NSNumber?

extension AppSettings { 

    @NSManaged var isSet: NSNumber? 
    @NSManaged var imageA: UIImage? 

} 

func setImage(inputAppSettings : AppSettings) 
{ 
    let theImage = UIImage(named: "image.png") 
    inputAppSettings.imageA = theImage 
} 



func getImage(inputAppSettings : AppSettings) 
{ 
    if let theImage = inputAppSettings.imageA 
    { 
     print("theImage: \(theImage)") 
    } 
} 

類MyTransformer:NSValueTransformer {

override class func allowsReverseTransformation() -> Bool 
{ 
    return true 
} 


class func transformedValue(value:AnyObject) -> AnyObject 
{ 
    var returnData:AnyObject = NSData() 
    let theImage = value as! UIImage 
    if let theData = UIImagePNGRepresentation(theImage) 
     {returnData = theData} 

    return returnData 
} 

class func reverseTransformedValue(value:AnyObject) -> AnyObject 
{ 
    var returnImage:AnyObject = UIImage() 
    let theData = value as! NSData 
    if let theImage = UIImage(data: theData) 
     {returnImage = theImage} 

    return returnImage 
} 

override class func transformedValueClass() -> AnyClass 
{ 
    return UIImage.self 
} 

}

func set() 
{ 
    if let moc = self.managedObjectContext { 
    let theAppSettingsAnyObject = NSEntityDescription.insertNewObjectForEntityForName("AppSettings", inManagedObjectContext: moc) 
     if let theAppSettings = theAppSettingsAnyObject as? AppSettings 
     { 
      theAppSettings.isSet = true 
      self.setImage(theAppSettings) 
     } 
     var savingError: NSError? 
     do { 
      try moc.save() 
     } catch let error1 as NSError { 
      savingError = error1 
     if let error = savingError{ 
      print("Failed to save . Error = \(error)") 
     } 
    } 

    } 
} 

回答

0

存儲圖像數據庫中重操作,這將需要更多的時間來編碼和解碼或轉化。

而不是轉換,嘗試將圖像保存在文檔目錄中,並將其URL存儲在數據庫中。

+0

謝謝你的回答。但在小圖像的情況下,只有一個圖像來存儲它,我認爲如果我將使用轉換,則代碼會更少,所以我仍然需要這種方式。 – user

1

您使用的是UIImage,它符合NSCoding。因此,你不需要自定義值變換器,因爲UIImage已經涵蓋了。所有你需要做的是:

  1. 聲明屬性有型Transformable在覈心數據模型編輯器
  2. 讀寫UIImage該屬性。轉換爲/從二進制形式將由UIImage處理。
+0

我不需要所有與NSValueTransformer的子類相關的代碼,並且我不需要更改@NSManaged var imageA:NSObject? – user

+0

到@NSManaged var imageA:UIImage? 是這樣嗎? 在這種情況下,圖像不保存到核心數據。 – user

+0

是的,它是如此。對於採用NSCoding的類,您不需要自定義轉換器。如果它不起作用,請確保將屬性類型更改爲「可變形」。 –

相關問題