我想将图像数组“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.
最佳答案
|=> 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/