大量のデータをNSUserDefaults
に保存することはお勧めしません。 NSUserDefaultsは、ユーザーの好みのような小さなデータを格納するためのものです。
まだ進めたい場合は、Playgroundでコンパイルした以下のコードを使用できます。
//: Playground - noun: a place where people can play
import UIKit
// Update your class to add encoder and decoder
class Place: NSObject, NSCoding {
var name: String?
var locationAddress: String?
var locationPhoneNumber: String?
init(name:String, locationAddress: String,locationPhoneNumber: String) {
self.name = name
self.locationAddress = locationAddress
self.locationPhoneNumber = locationPhoneNumber
}
required convenience init(coder aDecoder: NSCoder) {
let name = aDecoder.decodeObjectForKey("name") as! String
let locationPhoneNumber = aDecoder.decodeObjectForKey("locationphonenumber") as! String
let locationAddress = aDecoder.decodeObjectForKey("locationaddress") as! String
self.init(name: name, locationAddress: locationAddress, locationPhoneNumber: locationPhoneNumber)
}
func encodeWithCoder(aCoder: NSCoder) {
aCoder.encodeObject(name, forKey: "name")
aCoder.encodeObject(locationAddress, forKey: "locationaddress")
aCoder.encodeObject(locationPhoneNumber, forKey: "locationphonenumber")
}
}
//Create your array of chosen place
let placesChosen = [Place(name: "India",locationAddress: "IndianAddress",locationPhoneNumber:"IndianPhoneNumber"), Place(name: "India",locationAddress: "IndianAddress",locationPhoneNumber:"IndianPhoneNumber")]
// Add your data to NSUser defaults
var userDefaults = NSUserDefaults.standardUserDefaults()
let encodedData = NSKeyedArchiver.archivedDataWithRootObject(placesChosen)
userDefaults.setObject(encodedData, forKey: "place")
userDefaults.synchronize()
// Retrieve your data from NSUserDefaults
if let decodedData = NSUserDefaults.standardUserDefaults().objectForKey("place") as? NSData {
let decodedPlace = NSKeyedUnarchiver.unarchiveObjectWithData(decodedData) as! [Place]
print(decodedPlace)
}
これは可能ですが、 'Place'クラスは' NSCoding'を採用する必要があります – Paulw11
'NSUserDefaults'にデータを保存しないでください。データをファイルに書き込みます。 – rmaddy
"_データはあまり有名ではありません"と言うときは、NSUserDefautlsを1MB未満の小さなデータにのみ使用するように注意してください。あなたのケースでは、いくつかのケースで完全なオブジェクトを保存する予定がある場合は、NSUserDefaultsの完全なオブジェクトを取得/設定すると高価になる可能性があります。 Anotheオプションは、ファイルに書き込むか、CoreDataを使用することができます –