[iOS 8/Xcode 6] SwiftではじめるiOS開発 #2 [データ保存]

2014.09.18

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

ただいま基本動作を絶賛学習中です。


データ保存

アプリを作成しているとデータを永続化して保存する(アプリを終了しても保存されている)ことは、ほぼ必須の基本的実装だと思います。
iOSには、データを保存する方法としてはプロパティリストや、NSUserDefaults、CoreDataなど、いろいろと方法があります。

まずは、入門ということで使用頻度が高く、実装が容易なNSUserDefaultsをSwiftで実装してみます。

プロジェクト作成

SingleView Application でプロジェクトを作成します。

ss_102

作成したプロジェクトのMain.storyboardを開き、以下のようにオブジェクトを配置しました。

ss_103

続いて、controlキー + ドラッグ&ドロップでsaveボタン、loadボタンのactionを設定します。

ss_104

最後に、TextFieldと、Labelのオブジェクトも紐づけておきます。
先ほどのボタンと同様に controlキー + ドラッグ&ドロップで設定します。

ss_108

ViewControllerのコードが以下のようになりました。

class ViewController: UIViewController {
    
    // TextFieldのアウトレット
    @IBOutlet weak var textField: UITextField!
    
    // Labelのアウトレット
    @IBOutlet weak var label: UILabel!
    
    
    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }

    // saveボタンのアクション
    @IBAction func saveButton(sender: AnyObject) {
    }

    // loadボタンのアクション
    @IBAction func loadButton(sender: AnyObject) {
    }

}

テキストデータの保存と読み出し

動作としては、saveボタンを押したらTextFieldの文字列が保存されて、loadボタンを押したらlabelに表示されるという動作を想定しています。

それでは、実際にNSUserDefaultsを使ってデータの保存処理をしてみます。
saveButton()を以下のように書き換えます。

[Swift] // saveボタンのアクション @IBAction func saveButton(sender: AnyObject) { // データ保存処理

// NSUserDefaultsインスタンスの生成 let userDefaults = NSUserDefaults.standardUserDefaults()

// キー: "saveText" , 値: "" を格納。(idは任意) userDefaults.setObject(textField.text?, forKey: "saveText")

} [/Swift]

つぎに、読み込み処理としてloadButton()を以下のように書き換えます。

[Swift] // loadボタンのアクション @IBAction func loadButton(sender: AnyObject) { // データ読み込み処理

// NSUserDefaultsインスタンスの生成 let userDefaults = NSUserDefaults.standardUserDefaults()

// キーが"saveText"のStringをとります。 var loadText : String! = userDefaults.stringForKey("saveText")

// labelに表示 label.text = loadText

} [/Swift]

実行してみると、保存と読み込みができていることが確認できました。
また、アプリを終了しても保存されている事を確認できました。

ss_109

以上です。

バックナンバー

  • [iOS 8/Xcode 6] SwiftではじめるiOS開発 #1 [Table View]
  • [iOS 8/Xcode 6] SwiftではじめるiOS開発 #2 [データ保存]
  • [iOS 8/Xcode 6] SwiftではじめるiOS開発 #3 [API取得&JSONパース]