読者です 読者をやめる 読者になる 読者になる

酢ろぐ!

カレーが嫌いなスマートフォンアプリプログラマのブログ。

Xamarin.iOSでNSUserDefaultsにデータを保存する

Xamarin C# iPhone

iOSでアプリケーションの設定値などを永続的に保存するために使われる方法のひとつにNSUserDefaultsがあります。iOSには他にもCoreDataやファイルとして保存することができますがNSUserDefaultsはその中でも最も簡単な方法でしょう。

文字列をNSUserDefaultsへ保存する

var userDefault = NSUserDefaults.StandardUserDefaults;
userDefault.SetString("ほげほげ", "string-data");
userDefault.Synchronize();

文字列をNSUserDefaultsから取得する

var userDefault = NSUserDefaults.StandardUserDefaults;
var value = userDefault.StringForKey("string-data");

Debug.WriteLine(string.Format("value: {0}", value));

出力:
2014-10-20 10:30:39.792 App[895:21665] value: ほげほげ

Dictionary(辞書)をNSUserDefaultsへ保存する

NSDictionary型のオブジェクトをNSUserDefaultsへ保存する方法を紹介します。

// 保存するDictionaryを作成する
var dictionary = new NSMutableDictionary();
dictionary.SetValueForKey(new NSString("だる太郎"), new NSString("name"));
dictionary.SetValueForKey(new NSString("36"), new NSString("age"));

// NSUserDefaultsへDictionaryを保存する
var userDefault = NSUserDefaults.StandardUserDefaults;
userDefault.SetValueForKey(dictionary, new NSString("dict-data"));
userDefault.Synchronize();

追記:「Xamarin.iOSでDictionary<TK, TV>型からNSDictionary型オブジェクトへ変換する - 酢ろぐ!」の方法があることが分かったので、Xamarin.iOSではこちらの方法を利用した方が楽かもしれません*1

// 保存するDictionaryを作成する
var dict = new System.Collections.Generic.Dictionary<string, object>();
dict["aaa"] = "aaa";
dict["bbb"] = new NSString("bbb");
dict["ccc"] = 1;
dict["ddd"] = 393.9f;

var dictionary = NSDictionary.FromObjectsAndKeys(
    dict.Keys.Cast<object>().ToArray(),
    dict.Values.Cast<object>().ToArray());

// NSUserDefaultsへDictionaryを保存する
var userDefault = NSUserDefaults.StandardUserDefaults;
userDefault.SetValueForKey(dictionary, new NSString("dict-data"));
userDefault.Synchronize();

Dictionary(辞書)をNSUserDefaultsから取得する

var dict = userDefault.DictionaryForKey(new NSString("dict-data"));
var name = dict["name"].ToString();
var age = ((NSNumber)dict["age"]).Int32Value;

Debug.WriteLine(
    string.Format("name:{0} age:{1}", name, age));

出力:
name:だる太郎 age:36

Array(配列)をNSUserDefaultsへ保存する

// 保存するArrayを作成する
var array = new NSMutableArray();
array.Add(new NSString("item1"));
array.Add(new NSString("item2"));
array.Add(new NSString("item3"));
array.Add(new NSString("item4"));

// NSUserDefaultsへArrayを保存する
var userDefault = NSUserDefaults.StandardUserDefaults;
userDefault.SetValueForKey(array, new NSString("array-data"));
userDefault.Synchronize();

Array(配列)をNSUserDefaultsから取得する

var userDefault = NSUserDefaults.StandardUserDefaults;
var arrayData = userDefault.ArrayForKey("array-data");
foreach (var item in arrayData)
{
    Debug.WriteLine(item.ToString());
}

2014-10-20 10:49:36.818 App[1144:32632] item1
2014-10-20 10:49:36.821 App[1144:32632] item2
2014-10-20 10:49:36.823 App[1144:32632] item3
2014-10-20 10:49:36.825 App[1144:32632] item4

参考

iOS Core Data徹底入門

iOS Core Data徹底入門

関連記事

Xamarin.iOSを使ってアプリ開発する際に逆引きとしてお使いください。

*1:……と書いたものの、適切にネイティブ側の型を意識しないといけない場合は前述の方法を検討した方が良いかも