libro
www.tuyano.com
初心者のためのObjective-Cプログラミング入門

NSUserDefaults/NSCodingによる設定情報の保存 (4/8)

作成:2013-03-25 08:21
更新:2013-03-25 08:21

■NSCodingプロトコルの働き

NSStringNSArrayといった既にあるクラスを使って値を保存するのであれば、このようにNSUserDefaultsはとても簡単です。が、例えば独自に定義したクラスなどを使ってデータを管理するような場合、オリジナルクラスのインスタンスをNSUserDefaultsで保存できるようにしなければいけません。そのままでは、うまくデータが保存されないのです。

クラスをNSUserDefaultsで保存できるようにするためには、「NSCoding」というものを利用します。これは「プロトコル」というものです。プロトコルというのは、さまざまなメソッドの宣言だけをまとめたようなものです。これを組み込むことで、クラスに指定のメソッドを必ず実装するようにできます。

NSCodingプロトコルをクラスに設定することで、そのクラスには、インスタンスを保存し復元するためのメソッドを必ず用意しなければならなくなります。このメソッドを定義することで、クラスのインスタンスが保存できるようになるのです。

NSCodingに用意されているメソッドは2つだけです。それぞれ以下のように定義されます。
// NSCoderをもとにインスタンスを生成
-(id) initWithCoder: (NSCoder*) aDecoder {
    self = [super init];
    if (self) {
        ……値を読み込みインスタンスに設定する処理を用意……
    }
    return self;
}

// NSCoderにインスタンスの内容を出力
-(void) encodeWithCoder: (NSCoder*) aCoder {
    ……値を書き出す処理を用意……
}
引数の「NSCoder」というのは、インスタンスのエンコーディングを管理するクラスです。これを利用して、そのクラスのインスタンスを作って初期化したり、自身の内容を書きだしたりします。これでエンコーディングできるクラスが出来上がります。

NSUserDefaultsも独自のオブジェクトを保存する際にはNSCoderを利用してオブジェクトのエンコーディング処理を行なうことになります(これは次のページで説明)。NSCodingを実装することで、NSUserDefaultsで利用するための準備ができた、というわけですね。

※プログラムリストが表示されない場合

AddBlockなどの広告ブロックツールがONになっていると、プログラムリスト等が表示されない場合があります。これらのツールをOFFにしてみてください。

●プログラム・リスト●

※NSCodingプロトコルのメソッド

// NSCoderをもとにインスタンスを生成
-(id) initWithCoder: (NSCoder*) aDecoder {
    self = [super init];
    if (self) {
        ……値を読み込みインスタンスに設定する処理を用意……
    }
    return self;
}

// NSCoderにインスタンスの内容を出力
-(void) encodeWithCoder: (NSCoder*) aCoder {
    ……値を書き出す処理を用意……
}
※関連コンテンツ

「初心者のためのObjective-Cプログラミング入門」に戻る