NSKeyValueCoding
メソッドを使用してvalueForKeyPath:
、ネストされたオブジェクトのプロパティにアクセスできます。たとえば、次の辞書があるとします...
NSDictionary *homeAddressDict = @{ @"street" : @"2 Elm St.", @"city" : @"Reston" };
NSDictionary *addressesDict = @{ @"home" : homeAddressDict };
home
...次のように、ネストされた辞書の値にアクセスできます。
NSString *street = [addressesDict valueForKeyPath:@"home.street"];
NSString *city = [addressesDict valueForKeyPath:@"home.city"];
これは、より深くネストされたパスでも同じように機能します。次に例を示します。
NSDictionary *contactDict = @{ @"name" : @"Jim Ray", @"addresses" : addressesDict };
NSString *street2 = [contactDict valueForKeyPath:@"addresses.home.street"];
NSString *city2 = [contactDict valueForKeyPath:@"addresses.home.city"];
これは、オブジェクトが のインスタンスであるNSDictionary
か、 の派生クラスであるかに関係なく機能することに注意してください。 ただしNSObject
、カスタム クラスにキーと名前が一致するプロパティまたはインスタンス変数がある場合に限ります。
したがって、たとえば、自宅の住所を使用する代わりに、streetおよびcityという名前のプロパティ、getter メソッド、またはインスタンス変数(または_streetおよび_cityNSDictionary
という名前のインスタンス変数) を宣言したカスタム クラスのインスタンスを置き換えても、それにアクセスできます。同じ方法。Address
また、ターゲット プロパティを含むオブジェクトが変更可能な場合 (たとえば、 のインスタンスNSMutableDictionary
)、同じメカニズムを使用して値を変更することもできます。次に例を示します。
[contactDict setValue:@"Herndon" forKeyPath:@"addresses.home.city"];