2016-01-06 4 views
0

Я пытаюсь сделать Transformable image в swift с основными данными. Я создаю imageA, который является 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 в редакторе модели Core Data
  2. чтения и записи UIImage этому атрибуту. Преобразование в/из двоичной формы будет обрабатываться UIImage.
+0

Мне не нужен весь код, относящийся к подклассу NSValueTransformer , и мне не нужно менять @NSManaged var imageA: NSObject? – user

+0

to @NSManaged var imageA: UIImage? Это так? В этом случае изображение не сохраняется в основных данных. – user

+0

Да, это так. Вам не нужен специальный трансформатор для класса, который использует NSCoding. Если он не работает, убедитесь, что вы изменили тип атрибута на «transformable». –

Смежные вопросы