2017年8月24日木曜日

SpriteKit で UserDefaults を使う方法

概要

SpriteKit でも CoreData は使えるのですが結構頑張る必要があります
簡単なデータ保存であれば UserDefaults を使うのが簡単です

環境

  • macOS X 10.12.6
  • Xcode 8.3.3 (8E3004b)

使い方

まず didMove(to view: SKView) で初期化します

let defaults = UserDefaults.standard

didMove 以外の関数で使いたい場合はインスタンス変数として定義しておくと良いと思います
あとは好きな場所でデータの操作をします

例えば Int の値を保存して取得する場合は set で保存して

defaults.set(1, forKey: "key")

integer メソッドで取得します

let score = defaults.integer(forKey: "key")

set した際の型によって取得する際のメソッドが変わってくるので注意してください
所謂 kvs 的に使えます

最後に

SpriteKit で UserDefaults を使用する方法を紹介しました
UserDefaults はアプリが削除するまたはアプリのデータが削除されない限り残り続けます
当然ですがデータを永続化したい場合は Firebase などの mBaaS サービスを使いましょう

とりあえずローカルでデータを保存したい場合にはこれで十分かなと思います
CoreData は便利なんですが、ManagedObject のクラスなどを生成したりする必要があるので少し大変です

2 件のコメント:

  1. 独自で定義したクラスのオブジェクトなどを set したい場合は一旦 NSData に変更する必要があるようです
    https://stackoverflow.com/questions/42777730/cannot-set-non-property-list-object-in-userdefaults

    返信削除
  2. かつ import Foundation をして NSObject を継承したクラスにしないと「Unrecognized selector -[project.MyClass replacementObjectForKeyedArchiver:] のエラーになるようです
    かつ NSCoding を継承して required convenience init(coder aDecoder: NSCoder) と func encode(with aCoder: NSCoder) を実装する必要があります
    https://stackoverflow.com/questions/25750088/swift-does-not-conform-to-protocol-nscoding

    返信削除