我已经成功创建了一个字典数组,我认为这是我问题的最终解决方案(这里:Store CLLocation Manager Values in Device swift),这是我提出的代码:
func arrayOfDictionaries() {
var offline:[[String:AnyObject]] = []
offline.append(["LATITUDE: ": userLocation.coordinate.latitude, "LONGITUDE: ": userLocation.coordinate.longitude, "SPEED: ": userLocation.speed])
NSUserDefaults().setObject(offline, forKey: "offLine")
if let offLinePositions = NSUserDefaults().arrayForKey("offLine") as? [[String:AnyObject]] {
//print(offLinePositions)
for item in offLinePositions {
print(item["LATITUDE: "]! as! NSNumber) // A, B
print(item["LONGITUDE: "]! as! NSNumber) // 19.99, 4.99
print(item["SPEED: "]! as! NSNumber) // 1, 2
}
}
}
但是当我测试应用程序时,我意识到我只有1个位置存储在数组中。所以我的想法是创建另一个数组并插入第一个数组中的值。我怎么能这样做?
答案 0 :(得分:0)
您正在创建offline
数组,向其添加一个项目,然后使用此项覆盖用户默认值中的offLine
数组。这就是为什么你只有一个项目。
首先,您需要尝试从用户默认值中获取现有数组,然后将另一项添加到其中并将其写回用户默认值:
func arrayOfDictionaries() {
let defaults = NSUserDefaults.standardUserDefaults()
var offline:[[String:AnyObject]]
if defaults.arrayForKey("offLine") != nil {
//Grab offLine array from user defaults
offline = defaults.arrayForKey("offLine") as! [[String:AnyObject]]
} else {
//Setting the offLine array for the first time
offline = []
}
offline.append(["LATITUDE: ": userLocation.coordinate.latitude, "LONGITUDE: ": userLocation.coordinate.longitude, "SPEED: ": userLocation.speed])
defaults.setObject(offline, forKey: "offLine")
if let offLinePositions = NSUserDefaults().arrayForKey("offLine") as? [[String:AnyObject]] {
//print(offLinePositions)
for item in offLinePositions {
print(item["LATITUDE: "]! as! NSNumber) // A, B
print(item["LONGITUDE: "]! as! NSNumber) // 19.99, 4.99
print(item["SPEED: "]! as! NSNumber) // 1, 2
}
}
}