ios - 保存和读取图像阵列

标签 ios swift core-data swift2 nsuserdefaults

我想将图像数组“DtaAryVar”保存在“NSUserDefaults”或“文档目录”或“核心数据”中。任何人都可以逐步告诉我什么是最好和简单的方法来存储它以及'UIImage'数组(包含20个图像)到'NSData'转换。我的“DtaAryVar”包含 20 张图像。我尝试了以下从堆栈溢出中发现的方法,但出现错误。请帮助我。

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))
}

Error Cannot convert value of type 'AnyObject?' to expected argument type 'NSData.

enter image description here

最佳答案

|=> U can store only NSData in userDefautls or coreData not [NSData]

|=> If u r storing in core data, assign the attribute type as binary

|*|将原始数据中的行添加到 CoreData:

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

|*|从 CoreData 获取行数据:

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)")
}

在任何 viewController 类之外添加以下扩展函数并相应地尝试

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)
    }
}

关于ios - 保存和读取图像阵列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38153821/

相关文章:

iOS - 缓存如何工作?

core-data - Swift - 用 iCloud 核心数据替换核心数据

iOS:NSPredicate for "@count == 0"用于一对一和一对多关系

ios - 如何将其他NSManagedObjects存储为NSManagedObject的属性

iOS 只旋转 subview Controller 之一

ios - 如何使用 PromiseKit 在不同的 swift 类中链接 promise ?

windows-phone-7 - Core Data 相当于 Windows Phone

iphone - html5 标签中的全屏按钮

ios - Swift:如何获取旋转图像的高度和宽度。

ios - 在 UIAlertView 中按下按钮后继续