2015-08-22 3 views
0

Я знаю, что вы можете сохранить его с помощью свойства двоичных данных объекта, но можно ли сохранить несколько?Можете ли вы сохранить массив изображений в основных данных?

вы можете сохранить один с помощью этого:

UIImageJPEGRepresentation(image: UIImage) 

вы можете сохранить его, а затем преобразовать его в изображение снова

UIImage(data: ____) 

, но я могу преобразовать массив с изображениями в двоичный данные?

Если вы не можете с основными данными, любыми другими способами я могу это сделать?

BTW, массив изображения полно принят пользователем изображений, сохраненных на устройстве ..

Спасибо всех помощников!

+0

Существует уже метка 'swift', не нужно добавлять« Swift »в заголовок. –

ответ

3

преобразовать массив NSMutableArray и архивировать как NSData

var imgArray = [UIImage](); 

var CDataArray = NSMutableArray(); 

for img in imgArray{ 
    let data : NSData = NSData(data: UIImagePNGRepresentation(img)) 
    CDataArray.addObject(data); 
} 

//convert the Array to NSData 
//you can save this in core data 
var coreDataObject = NSKeyedArchiver.archivedDataWithRootObject(CDataArray); 

после вытягивать из CDATA, экстракт данные:

//extract: 
if let mySavedData = NSKeyedUnarchiver.unarchiveObjectWithData(coreDataObject) as? NSArray{ 
    //extract data.. 
} 
+0

Как преобразовать массив в данные? –

+0

@ArbelIsraeli с использованием 'NSKeyedArchiver.archivedDataWithRootObject (CDataArray);' Посмотрите пример –

+0

Да, но что, если я хочу сохранить данные на CD другим способом? –

0

На основании ответа DANIEL-Кр, я создал быстрое расширение, чтобы сделать это легко добавить к объектам модели:

let coreDataObject = imgArray.coreDataRepresentation() 

if let retrievedImgArray = coreDataObject?.imageArray() { 
    // use retrievedImgArray 
} 

Вот расширение

import UIKit 

typealias ImageArray = [UIImage] 
typealias ImageArrayRepresentation = Data 

extension Array where Element: UIImage { 
    // Given an array of UIImages return a Data representation of the array suitable for storing in core data as binary data that allows external storage 
    func coreDataRepresentation() -> ImageArrayRepresentation? { 
     let CDataArray = NSMutableArray() 

     for img in self { 
      guard let imageRepresentation = UIImagePNGRepresentation(img) else { 
       print("Unable to represent image as PNG") 
       return nil 
      } 
      let data : NSData = NSData(data: imageRepresentation) 
      CDataArray.add(data) 
     } 

     return NSKeyedArchiver.archivedData(withRootObject: CDataArray) 
    } 
} 

extension ImageArrayRepresentation { 
    // Given a Data representation of an array of UIImages return the array 
    func imageArray() -> ImageArray? { 
     if let mySavedData = NSKeyedUnarchiver.unarchiveObject(with: self) as? NSArray { 
      // TODO: Use regular map and return nil if something can't be turned into a UIImage 
      let imgArray = mySavedData.flatMap({ 
       return UIImage(data: $0 as! Data) 
      }) 
      return imgArray 
     } 
     else { 
      print("Unable to convert data to ImageArray") 
      return nil 
     } 
    } 
} 
Смежные вопросы