2016-07-01 21 views
1

Ich möchte mein Bild-Array 'DtaAryVar' in 'NSUserDefaults' oder im 'Dokumentverzeichnis' oder in 'Kerndaten' speichern. Kann mir jemand bitte Schritt für Schritt sagen, was die beste und einfachste Art ist, es auch 'UIImage' Array (das 20 Bilder enthält) zu 'NSData' Konvertierung zu speichern. Meine 'DtaAryVar' enthält 20 Bilder. Ich habe unten Methode versucht, die ich vom Stapelüberlauf fand, aber einen Fehler erhalten. Bitte hilf mir.Bild-Array speichern und lesen

var DtaAryVar: [NSData]() 
convert array of NSData to Data and store 

let DtaZipVar = NSKeyedArchiver.archivedDataWithRootObject(DtaAryVar) 

let DftSdbVal = NSUserDefaults.standardUserDefaults() 
DftSdbVal.setObject(DtaZipVar, forKey: "ImageKey") 

get back data by 

var DtaZipVar = DftSdbVal.valueForKey("ImageKey") 
var DtaAryVar = NSKeyedUnarchiver.unarchiveObjectWithData(DtaZipVar) as! [NSData] 

let ImjAryVar = [UIImage]() 
for DtaIdxVar in DtaAryVar 
{ 
    ImjAryVar.append(UIImage(data : DtaIdxVar)) 
} 

Fehler Wert kann nicht vom Typ umwandeln 'ANYOBJECT?' zum erwarteten Argumenttyp 'NSData.

enter image description here

Antwort

0

| => U nur NSData in userDefautls oder Coredata speichern kann nicht [NSData]

| => Wenn ur Speicherung in Kerndaten, weist das Attribut als Binärtyp

| * | Zeile von Rohdaten zu CoreData hinzufügen:

let NewRowDtaVar = NSEntityDescription.insertNewObjectForEntityForName("NamTbl", inManagedObjectContext: ContxtVar) 
NewRowDtaVar.setValue(ImgDtaVar, forKey: "NamKol") 
AppDgtVar.saveContext() 

| * | Row Daten von Coredata erhalten:

let GetDtaAryReqVar = NSFetchRequest(entityName: "NamTbl") 
GetDtaAryReqVar.returnsObjectsAsFaults = false 
GetDtaAryReqVar.predicate = NSPredicate(format: "NamKol = TstTxt") 

let ImgDtaVar = NSData() 
do 
{ 
    let ReqResAryVar: Array = try ContxtVar.executeFetchRequest(GetDtaAryReqVar) 

    if(ReqResAryVar.count > 0) 
    { 
     for ReqResVar in ReqResAryVar 
     { 
      ImgDtaVar = ReqResVar.valueForKey("NamKol") as! NSData! 
     } 
    } 
} 
catch let ErrVar as NSError 
{ 
    print("Fetch failed: \(ErrVar.localizedDescription)") 
} 

Fügen Sie die folgenden Erweiterungsfunktionen außerhalb eines Ihrer Viewcontroller Klasse und versuchen entsprechend

extension UIImage 
{ 

//|*| Convert Image NSData Arry to UIImage Array 

    func CnvDtaAryTooImjAryFnc(ImjDtaAryPsgVar: [NSData])-> [UIImage] 
    { 
     var ImjAryVar = [UIImage]() 
     for DtaIdxVar in ImjDtaAryPsgVar 
     { 
      ImjAryVar.append(UIImage(data : DtaIdxVar)!) 
     } 
     return ImjAryVar 
    } 

//|*| Convert Image NSData to UIImage Array 

    func CnvDtaTooImjAryFnc(ImjDtaPsgVar: NSData)-> [UIImage] 
    { 
     let ImjAryVar = NSKeyedUnarchiver.unarchiveObjectWithData(ImjDtaPsgVar) as! [NSData] 
     return CnvDtaAryTooImjAryFnc(ImjAryVar) 
    } 

//|*| Convert UIImage Array to Image NSData Arry 

    func CnvImjAryTooDtaAryFnc(ImjDtaPsgVar: [UIImage], ImjTyp ImjTypPsgVar: String?="Jpg")-> [NSData] 
    { 
     var ImjDtaAryVar = [NSData]() 
     for DtaIdxVar in ImjDtaPsgVar 
     { 
      if(ImjTypPsgVar == "Png") 
      { 
       if let GetImjDtaVar = UIImagePNGRepresentation(DtaIdxVar) 
       { 
        ImjDtaAryVar.append(GetImjDtaVar) 
       } 
      } 
      else 
      { 
       if let GetImjDtaVar = UIImageJPEGRepresentation(DtaIdxVar, 1) 
       { 
        ImjDtaAryVar.append(GetImjDtaVar) 
       } 
      } 
     } 
     return ImjDtaAryVar 
    } 

//|*| Convert UIImage Array to Image NSData 

    func CnvImjAryTooDtaFnc(ImjDtaPsgVar: [UIImage], ImjTyp ImjTypPsgVar: String?="Jpg")-> NSData 
    { 
     let ImjDtaAryVar = CnvImjAryTooDtaAryFnc(ImjDtaPsgVar, ImjTyp : ImjTypPsgVar) 
     return NSKeyedArchiver.archivedDataWithRootObject(ImjDtaAryVar) 
    } 
} 
Verwandte Themen