это класс Place
, который я определил:
class Place: NSObject {
var latitude: Double
var longitude: Double
init(lat: Double, lng: Double, name: String){
self.latitude = lat
self.longitude = lng
}
required init(coder aDecoder: NSCoder) {
self.latitude = aDecoder.decodeDoubleForKey("latitude")
self.longitude = aDecoder.decodeDoubleForKey("longitude")
}
func encodeWithCoder(aCoder: NSCoder!) {
aCoder.encodeObject(latitude, forKey: "latitude")
aCoder.encodeObject(longitude, forKey: "longitude")
}
}
Вот как я попытался сохранить массив Place
s:
var placesArray = [Place]
//...
func savePlaces() {
NSUserDefaults.standardUserDefaults().setObject(placesArray, forKey: "places")
println("place saved")
}
Это не сработало, вот что я получаю на консоли:
Property list invalid for format: 200 (property lists cannot contain objects of type 'CFType')
Я новичок в iOS, не могли бы вы мне помочь?
ВТОРОЕ ИЗДАНИЕ
Я нашел решение для сохранения данных:
func savePlaces(){
let myData = NSKeyedArchiver.archivedDataWithRootObject(placesArray)
NSUserDefaults.standardUserDefaults().setObject(myData, forKey: "places")
println("place saved")
}
Но я получаю сообщение об ошибке при загрузке данных с помощью этого кода:
let placesData = NSUserDefaults.standardUserDefaults().objectForKey("places") as? NSData
if placesData != nil {
placesArray = NSKeyedUnarchiver.unarchiveObjectWithData(placesData!) as [Place]
}
ошибка:
[NSKeyedUnarchiver decodeDoubleForKey:]: value for key (latitude) is not a double number'
Я уверен, что я заархивировал Double, есть проблема с процессом сохранения/загрузки
Любая подсказка?