我创建类如以下和要保存数组:[costCategory]到磁盘,迅速IOS数据持久性的UIImage
class costCategory : NSObject, NSCoding {
var name : String
var defaultValue : Int
var thisMonthsEstimate : Int
var sumOfThisMonthsActuals : Int
var riskFactor : Float
var monthlyAverage : Float
var icon: UIImage!
init (name:String, defaultValue:Int, thisMonthsEstimate:Int, sumOfThisMonthsActuals:Int, riskFactor:Float, monthlyAverage:Float, icon: UIImage) {
self.name = name
self.defaultValue = defaultValue
self.thisMonthsEstimate = thisMonthsEstimate
self.sumOfThisMonthsActuals = sumOfThisMonthsActuals
self.riskFactor = riskFactor
self.monthlyAverage = monthlyAverage
self.icon = icon
}
// MARK: NSCoding
required init(coder decoder: NSCoder) {
//Error here "missing argument for parameter name in call
self.name = decoder.decodeObjectForKey("name") as! String
self.defaultValue = decoder.decodeIntegerForKey("defaultValue")
self.thisMonthsEstimate = decoder.decodeIntegerForKey("thisMonthsEstimate")
self.sumOfThisMonthsActuals = decoder.decodeIntegerForKey("sumOfThisMonthsActuals")
self.riskFactor = decoder.decodeFloatForKey("riskFactor")
self.monthlyAverage = decoder.decodeFloatForKey("monthlyAverage")
self.icon = decoder.decodeObjectForKey("icon") as! UIImage!
super.init()
}
func encodeWithCoder(coder: NSCoder) {
coder.encodeObject(self.name, forKey: "name")
coder.encodeInt(Int32(self.defaultValue), forKey: "defaultValue")
coder.encodeInt(Int32(self.thisMonthsEstimate), forKey: "thisMonthsEstimate")
coder.encodeInt(Int32(self.sumOfThisMonthsActuals), forKey: "sumOfThisMonthsActuals")
coder.encodeFloat(self.riskFactor, forKey: "riskFactor")
coder.encodeFloat(self.monthlyAverage, forKey: "monthlyAverage")
coder.encodeObject(self.icon, forKey: "icon")
}
}
我保存的数据中的viewController如下:
class ViewController:UIViewController {
@IBOutlet weak var photo: UIImageView!
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
let defaults = NSUserDefaults.standardUserDefaults()
let arrayOfObjectsKey = "arrayOfObjectsKey"
var arrayOfObjects = [costCategory]()
arrayOfObjects.append(costCategory(name: "Mark", defaultValue: 50, thisMonthsEstimate: 60, sumOfThisMonthsActuals: 70, riskFactor:80, monthlyAverage:90, icon: UIImage(named:"Mark.JPG")!))
arrayOfObjects.append(costCategory(name: "Mary", defaultValue: 50, thisMonthsEstimate: 60, sumOfThisMonthsActuals: 70, riskFactor:80, monthlyAverage:90, icon: UIImage(named:"Mary.JPG")!))
var arrayOfObjectsData = NSKeyedArchiver.archivedDataWithRootObject(arrayOfObjects)
var arrayOfObjectsUnarchivedData = defaults.dataForKey("arrayOfObjectsKey")!
var arrayOfObjectsUnarchived = NSKeyedUnarchiver.unarchiveObjectWithData(arrayOfObjectsUnarchivedData) as! [costCategory]
**println(arrayOfObjectsUnarchived[0].icon)**
**photo.image = arrayOfObjectsUnarchived[0].icon**
}
}
我println(arrayOfObjectsUnarchived [0] .icon)发现它是零,无法获取我保存的原始图像,为什么?并使用以下方法保存就足够了?任何人都有其他的方法,如fileManger?谢谢!!!!
设默认= NSUserDefaults.standardUserDefaults()
VAR arrayOfObjectsUnarchivedData = defaults.dataForKey( “arrayOfObjectsKey”)!
var arrayOfObjectsUnarchived = NSKeyedUnarchiver.unarchiveObjectWithData(arrayOfObjectsUnarchivedData)as! [costCategory]
你真的给我一个提示在文件系统中保存图像并将系统路径存储在我的模型中。我放弃了我原来的想法,将UIImage保存在我的模型中。但是,你能给我一个简单的代码来演示如何保存它吗?我刚开始学习这个部分,不熟悉它。谢谢!!!! – Bog
看看我的编辑。我希望它有帮助! – Abhinav