好的,我有一个.plist文件,
里面有一个NSDictionary *StoredAddresses
,
在StoredAddresses
内,另有一些NSDictionary
我知道我可以使用,
if ([dictionaryOfAddresses objectForKey:@"StoredAddresses"])
要访问顶层NSDictionaries,但如何搜索存储的地址中的键?
好的,我有一个.plist文件,
里面有一个NSDictionary *StoredAddresses
,
在StoredAddresses
内,另有一些NSDictionary
我知道我可以使用,
if ([dictionaryOfAddresses objectForKey:@"StoredAddresses"])
要访问顶层NSDictionaries,但如何搜索存储的地址中的键?
如果我理解正确的话,你有一个字典中嵌套了其他的字典。这和其他对象一样运作:
NSDictionary* Address=[dictionaryOfAddresses objectForKey:@"Home Address"];
NSString* Street=[Address objectForKey:@"Street"];
如果您想要,您可以将这些调用合并:
NSString* Street=[[dictionaryOfAddresses objectForKey:@"Home Address"] objectForKey:@"Street"];
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
的自定义类,只要自定义类具有与键匹配的属性或实例变量的名称即可。例如,可以替换使用 NSDictionary
作为家庭地址,可以用声明了属性、getter方法或实例变量名为street和city(或实例变量名为_street和_city)的自定义 Address
类的实例来代替,并且仍然可以以相同的方式访问它。NSMutableDictionary
的实例),则甚至可以使用相同的机制修改该值,例如:[contactDict setValue:@"Herndon" forKeyPath:@"addresses.home.city"];
这将返回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"];
另一种获取子字典的新方法是使用以下简写符号:
NSString *street = dictionaryOfAddresses[@"HomeAddress"][@"Street"];