9

OK、.plist ファイルがあります。

私が持っているのはNSDictionary *StoredAddresses

StoredAddressesには、もう一握りのNSDictionary

使えることはわかっていますが、

if ([dictionaryOfAddresses objectForKey:@"StoredAddresses"])

最上位の NSDictionaries にアクセスするには、保存されているアドレス内のキーを検索するにはどうすればよいですか?

4

4 に答える 4

14

ええと、これを正しく読めば、辞書の中に辞書があります。これは、他のオブジェクトと同じように機能します。

NSDictionary* Address=[dictionaryOfAddresses objectForKey:@"Home Address"];
NSString* Street=[Address objectForKey:@"Street"];

次の場合は、呼び出しを組み合わせることができます。

NSString* Street=[[dictionaryOfAddresses objectForKey:@"Home Address"] objectForKey:@"Street"];
于 2012-09-19T08:32:22.807 に答える
3

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"];
于 2012-09-19T12:49:55.823 に答える
1

これはStoredAddresses内のキーの配列を返します

yourArray=[[dictionaryOfAddresses objectForKey:@"StoredAddresses"] allKeys];

次に、 yourArray を印刷してキーを確認できます。次に、キーを知った後、次のいずれかを使用してアクセスできます

dict=[[dictionaryOfAddresses objectForKey:@"StoredAddresses"] objectForKey:[yourArray objectAtIndex:index_for_that_key]];

また

dict=[[dictionaryOfAddresses objectForKey:@"StoredAddresses"] objectForKey:@"key_for_your_dict"];
于 2012-09-19T08:29:31.837 に答える
1

きちんとしたコードを作成するサブディクショナリを取得するもう 1 つの新しい方法は、次の簡略表記です。

NSString *street = dictionaryOfAddresses[@"HomeAddress"][@"Street"];
于 2017-01-11T20:54:45.663 に答える