キー値コーディング


キー値コーディングは、間接的に文字列識別子を使用して、オブジェクトの属性および関係性にアクセスするためのメカニズムです。それが支えるのが、Cocoa プログラミングに特別ないくつかの機構や技術に関連している、それらの間のコアデータ、アプリのスクリプト対応、バインディング技術、宣言されたプロパティの言語機能です。(スクリプト機能とバインディングは、OS X 上の Cocoa に固有のものです)また、あなたのプログラムコードを簡素化するために、キー値コーディングを使用することができます。


オブジェクトのプロパティと KVC


キー値コーディング(またはKVC)の中心となるのは、プロパティの一般的な概念です。プロパティは、オブジェクトがカプセル化する際の単位を指します。プロパティには、2つの一般的なタイプのいずれかになります:属性(たとえば、名前、タイトル、小計、または textColor(テキストの色) 属性)、または他のオブジェクトとの関係。関係は、1対1または1対多のいずれかです。1対多の関係の値は、通常、関係が順序付けられているか順序付けられていないかに応じて、配列か集合です。


KVC は文字列識別子であるキーを介して、オブジェクトのプロパティを検索します。キーは、通常、オブジェクトによって定義されたアクセサメソッドまたはインスタンス変数の名前に対応します。キーは、特定の規則に準拠する必要があります:それは、ASCII でエンコードされ、小文字で始まり、余白があってはなりません。キーパスは、横切るオブジェクトのプロパティの順序を指定するために使用され、ドットで区切られたキーの文字列です。シーケンスの最初のキーのプロパティは、特定のオブジェクト(次の図の employee1)を基準とし、その後の各キーは、前のプロパティの値を基準に評価されます。


key_value_coding_2x



クラスを KVC に準拠させる


NSKeyValueCoding の、非公式なプロトコルにより、KVC が可能となります。そのメソッド valueForKey:setValue:forKey の2つは、そのキーが与えられたとき、プロパティ値を取得し、設定しているため、特に重要です。NSObject は、これらのメソッドのデフォルトの実装を提供し、クラスがキー値コーデングに準拠している場合には、この実装に依存します。


プロパティが KVC に準拠する方法は、そのプロパティが、属性、1対1の関係、または1対多の関係であるかどうかに依存します。属性および1対1の関係では、クラスが優先(key は、プロパティキーを参照します)順で、以下の少なくとも1つを実装する必要があります。


  1. クラスには、key と言う名前で宣言されたプロパティがあります。
  2. これは、key と言う名前の、アクセサメソッドを実装し、プロパティが変更可能なら、SetKey: を実装します。(プロパティがブール属性である場合、ゲッターアクセサメソッドは、 isKey と言う形式を持っています。)
  3. これは、key または _key と言う形式のインスタンス変数を宣言しています。

1対多の関係の KVC 準拠の実装は、より複雑な手順です。この手順が何であるかを学ぶためには、もっと詳しくキー値コーディングを記述した文書を参照してください。


前提条件の記事

オブジェクトモデリング

アクセサメソッド


関連記事

宣言されたプロパティ


既出の議論

キー値コーディングプログラミングガイド






次の章
前の章
目次
Xcode の新機能

インターフェースビルダー ヘルプ
NSObject(class)
概要(NSObject,class)

  • アクセシビリティ
  • VoiceOver での作業
  • アクセサメソッド
  • 命名規則
  • アプリ ID
  • 明示的なアプリ ID は、一つのアプリに一致
    ワイルドカードアプリ ID は複数のアプリに一致
    アプリコード署名
  • ブロックオブジェクト
  • ブロックの宣言
    ブロックの作成
    変更可能なブロックの変数
    ブロックを使用する
    比較演算
  • バンドル
  • バンドルの構造と内容 バンドルリソースへのアクセス
    ロード可能なバンドル
  • カテゴリ
  • 宣言
    実装
  • クラスクラスタ
  • 利点
    検討事項
  • クラスの定義
  • インターフェース
    実装(Implementation)
  • クラスメソッド
  • サブクラス
    インスタンス変数
    self
  • ココア(タッチ)、Cocoa(Touch)
  • フレームワーク(Framework)
    言語
    コーディング規則
  • コレクション(Collection)
  • コレクションクラス
    順序付けスキーム
  • コントローラーオブジェクト
  • コントローラの調整
    ビューコントローラ
    仲介コントローラ(OS X)
    宣言されたプロパティ
  • デリゲート(Delegate)
  • デリゲートとココアフレームワーク
    デリゲートと通知
    データソース
    動的バインディング
  • 動的型付け
  • isa ポインタ
  • 列挙
  • NSEnumerator
    高速列挙
  • 例外処理
  • 例外の種類
    コンパイラディレクティブを使用した例外処理
    信号伝達のエラー
    フレームワーク
    情報プロパティリスト
  • 初期化
  • イニシャライザ宣言の型
    初期化子を実装
    国際化
  • 内観(イントロスペクション)
  • イントロスペクション情報の種類
  • キー値コーディング
  • オブジェクトのプロパティと KVC
    クラスを KVC に準拠させる
  • キー値監視
  • KVO の実装
    KVO はバインディングの不可欠な部分(OS X)
  • メモリ管理
  • メモリ管理の規則
    メモリ管理の側面
    メッセージ
    メソッドのオーバーライド
  • モデルオブジェクト
  • うまく設計されたモデルクラス
  • モデル・ビュー・コントローラ
  • モデルオブジェクト
    ビュー・オブジェクト
    コントローラオブジェクト
  • 複数のイニシャライザ
  • 指定イニシャライザ
    Nib ファイル
  • 通知
  • 通知オブジェクト
    通知を観察する
    通知を投稿
  • アーカイブ
  • 鍵付き連続アーカイバ
    鍵付きアーカイブの作成とデコード
  • オブジェクトの比較
  • 比較ロジックを実装する
  • オブジェクトのコピー
  • オブジェクトコピーのための要件
    メモリ管理への影響
  • オブジェクト作成
  • オブジェクト作成式の形式
    メモリ管理への影響
    ファクトリメソッド
  • オブジェクトの暗号化
  • オブジェクトの暗号化と復号化する方法
    キー付き対連続的アーカイブ
    オブジェクトグラフ
    オブジェクトのライフサイクル
    オブジェクトモデリング
  • オブジェクト可変性(mutability)
  • 可変オブジェクトを受け取る
    可変オブジェクトを格納
    オブジェクトの所有権
    Objective-C
  • プロパティ(特性)リスト
  • プロパティリストの型とオブジェクト
    プロパティリストのベストプラクティス
    プロパティリストのシリアライズ
  • プロトコル
  • 公式、非公式なプロトコル
    正式なプロトコルを採用、準拠
    独自のプロトコルを作成
    ルートクラス
  • セレクタ
  • セレクタの取得
    セレクタの使用
    シングルトン
  • 統一された型の ID
  • UTI は逆ドメイン·ネーム·システム規則を使用
    統一された型 ID は適合階層で宣言
    OS X のアプリは、アプリバンドルでそれらを定義して新しい UTIを追加
  • 値オブジェクト
  • NSValue