我可以根据另一个NSUserDefault值保存NSUserDefault值吗?

时间:2016-12-20 17:45:15

标签: ios objective-c nsuserdefaults

这是我想要实现的目标: 我的位置保存在NSUserDefaults中。现在,在NSUserDefault中添加了这个,用户将选择一个值,我想将此值保存到此位置。因此,当用户再次选择该位置时,我可以返回所选位置。

因此,不同位置的此值不同,用户也可以随时更改。我想知道是否有可能这样做?如果没有,那么优化的方法是什么?我还没有开始这个实现,所以没有代码。

2 个答案:

答案 0 :(得分:0)

如果您想保存字典:

let dict:[String:String] = ["key":"value"]
// set multiple values into a specific location
UserDefaults.standard.set(dict, forKey: "locationA")

// get the values for a given location
let result = UserDefaults.standard.value(forKey: "locationA")
print(result!)

或简单值

let value = "value"

// set simple value into a specific location (for key)
UserDefaults.standard.set(value, forKey: "locationA")

// get the value for a given location
let result = UserDefaults.standard.value(forKey: "locationA")
print(result!)

答案 1 :(得分:0)

可以这样做。对于每个位置,您可以创建一个两项NSArray,其中第一项是位置,第二项是值。例如:

NSArray *locationData = @[location, value];

您会保留这两项NSArray的{​​{1}},并将其保存到NSArrays

NSUserDefaults

要查找特定位置的值,您将遍历数组(此代码将100米内的任何位置视为同一位置):

NSArray *allLocations = @[@[location1, value1], @[location2, value2], ...];
[[NSUserDefaults standardUserDefaults] setObject:allLocations forKey:@"LocationData"];

另一种方法是将此信息存储在字典中,键入该位置。您不能直接使用- (id)valueForLocation:(CLLocation *)location { for (NSArray *locInfo in allLocations) { CLLocation *loc = (CLLocation *) locInfo[0]; if ([location distanceFromLocation:loc] < 100) { return locInfo[1]; } } return nil; } 作为键,而是将CLLocation的坐标放入CLLocation并使用它。有关详细信息,请参阅using CLLocation objects as keys in dictionary