2016-12-20 4 views
0

ここに私が達成しようとしているものがあります: 私はNSUserDefaultsに保存された場所を持っています。これでNSUserDefaultで追加されたユーザーは値を選択し、この値をこの場所に保存します。したがって、ユーザーがその場所を再度選択すると、選択した場所を戻すことができます。

この値は場所によって異なり、ユーザーはいつでも変更することもできます。私はそれが可能であることを知りたいですか?そうでない場合、これを行う最適な方法は何でしょうか?私はまだこの実装を開始していないので、コードはありません。別のNSUserDefault値に基づいてNSUserDefault値を保存できますか?

+0

キー値に基づいて値を保存します。キーが同じ場合は、値を保存するたびに値がwriterne以上になります。キーが異なる場合は、それらのキーをすべて追跡する方法が必要です。 –

答えて

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!) 
0

をこれを行うことが可能です。各場所について、最初の項目が場所であり、2番目の項目が値である2つの項目NSArrayを作成できます。たとえば:

NSArray *locationData = @[location, value]; 

あなたはこれらの2項目NSArraysNSArrayを続けるだろう、とNSUserDefaultsにそれを保存します。

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

あなたは、配列の中を歩くだろう特定の場所の値を検索するには(このコードは同じ位置であることが100メートル内の任意の位置を考慮):

- (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の座標をNSValueに入れて使用します。詳細はusing CLLocation objects as keys in dictionaryを参照してください。

関連する問題