【Swift】NSUserDefaultsの使い方。アプリの設定情報を保存する。(Swift 2.1、XCode 7.2)

2020年6月16日

NSUserDefaultsとは

本記事ではNSUserDefaultsの使い方について説明する。

NSUserDefaultsとは、アプリで入力、編集したデータを端末に保存する機能である。

アプリ起動中に入力したデータはメモリに一時保持されているだけなので、保存せずにアプリを終了するとメモリのデータが消えるとともに入力データも消える。なので、再起動しても前回の入力データを見ることはできない。

入力データはメモリに保持されている

 

アプリを使いやすくするために入力データを保存しておきたい。そんなときに利用されるのがNSUserDefaultsである。

NSUserDefaultsを使ってデータを保存すると、一旦メモリ上にデータが置かれ、アプリの動きとは非同期で保存ファイル(plistファイル)への出力が行われる。

そして、アプリ再起動時にplistファイルのデータが自動でメモリに展開される。これにより、前回の状態を維持したままアプリを利用できるということだ。

NSUserDefaultsの保存と読込み

 

NSUserDefaultsはplistファイルのデータをすべてメモリ上に展開するため、限られたメモリ領域で大量データを扱うと領域が逼迫する危険がある。

また、Swiftの辞書と同じように「キーと値」をセットにデータを保持するので検索が実装しづらい。ゆえに、NSUserDefaultsは大量のデータを扱うには不向きであり、設定情報などの軽量データを扱うのに適した機能である。

データを保存する機能には他にCore DataやiCloudがあるので、大量データを保存する場合はそちらを利用するのが良い。

NSUserDefaultsを使ってみる

テキストフィールドに入力した文字列をNSUserDefaultsを使って保存し、アプリ再起動時に再び参照できるものを実装してみよう。

以降の手順を開始する前のXcodeプロジェクトをGitHubに置いたので、試してみる人はご利用されたし。
⇒「テスト用プロジェクト

事前準備では、テキストフィールドに入力した文字列をラベルに表示するようにしておいた。保存処理は実装していないので、アプリを再起動するとラベルに表示したデータは初期値に戻る。

 

ViewController.swiftを以下のコードに変更する。

アプリ起動時に文字列が保存されているかを確認し、保存されている場合はラベルに表示している。

テキストフィールドの入力終了時に、ラベルに設定された文字列を保存している。文字列を確実に保存するためにsynchronizeメソッドを使ってplistファイルへの出力と同期をとっている。

 

以下は実際のプレイ動画。前回入力した文字列が再起動時に表示されるようになった。

 

保存できるデータ型

NSUserDefaultsを使って保存できるデータ型はStringに限らず、様々な型を保存できる。

以下のコードはNSUserDefaultsで使えるデータ型を用いて、データの保存、読込みを試したコード。