2016-09-19 128 views
1

我試圖在core data中存儲圖像。將圖像轉換爲NSData以保存核心數據

core data屬性文件要求圖像是在NSData

import Foundation 
import CoreData 

extension Item { 

    @nonobjc public class func fetchRequest() -> NSFetchRequest<TaskItem> { 
    return NSFetchRequest<TaskItem>(entityName: "Item"); 
    } 

    @NSManaged public var itemImage: NSData? 
} 

然而,當我試圖使用保存到core data

@IBAction func saveBtnTapped(_ sender: AnyObject) { 


     let context = (UIApplication.shared.delegate as! AppDelegate).persistentContainer.viewContext 

     let item = Item(context: context) 

     let imageData: NSData = UIImageJPEGRepresentation(taskImage.image!, 0.2) 

     item.itemImage = imageData 

     (UIApplication.shared.delegate as! AppDelegate).saveContext() 

     } 
     navigationController?.popViewController(animated: true) 
    } 

我得到以下錯誤:

Cannot convert value of type 'Data?' to specified type 'NSData' 

我以爲我在做它是正確的,但它不適合我。有人能給我一個如何解決它的想法嗎?

在此先感謝。

+3

不要將圖像保存到核心數據中,只是將圖像保存到磁盤並將圖像名稱/路徑保存到coredata – Tj3n

+1

您可以將圖像保存到本地目錄,然後將路徑/ URL保存到coredata。 –

+0

如果一切都失敗了,我會走這條路 – SwiftStarter

回答

4

UIImageJPEGRepresentation返回一個Data?值。 這可以橋接到NSData?as。然後,使用可選的結合 (if let)安全地拆開包裝可選:

if let imageData = UIImageJPEGRepresentation(...) as NSData? { 
    // Now `imageData` is a `NSData` object. 
    item.itemImage = imageData 
} else { 
    // Conversion to JPEG data failed. 
} 

你也應該諮詢「二進制大數據對象(BLOB)」 一節中的「核心數據編程指南」有關的 的影響將二進制數據直接存儲在數據庫中以及可能的備選方案

+0

是的,這確實把它轉換爲NSData謝謝。 – SwiftStarter