好的,我有一个.plist文件
其中我有一个NSDictionary *StoredAddresses,
在StoredAddresses内部,是另一把NSDictionary
我知道我可以用,
if ([dictionaryOfAddresses objectForKey:@"StoredAddresses"])访问顶级NSDictionaries,但是如何在存储的地址中搜索关键字呢?
发布于 2012-09-19 16:32:23
好吧,如果我没看错的话,字典里面有字典。它的工作原理与任何其他对象一样:
NSDictionary* Address=[dictionaryOfAddresses objectForKey:@"Home Address"];
NSString* Street=[Address objectForKey:@"Street"];如果需要,您可以合并这些调用:
NSString* Street=[[dictionaryOfAddresses objectForKey:@"Home Address"] objectForKey:@"Street"];发布于 2012-09-19 20:49:56
您可以使用NSKeyValueCoding方法valueForKeyPath:来访问嵌套对象的属性。例如,给定以下字典...
NSDictionary *homeAddressDict = @{ @"street" : @"2 Elm St.", @"city" : @"Reston" };
NSDictionary *addressesDict = @{ @"home" : homeAddressDict };...you可以访问嵌套的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派生的任何自定义类,这都将起作用。
因此,例如,您可以替换一个自定义Address类的实例,该实例声明了属性、getter方法或名为 NSDictionary 和city的实例变量(或名为_street和_city<代码>E217的实例变量),而不是使用家庭地址的代码,并且仍然以相同的方式访问它。
如果包含目标属性的对象是可变的(例如,NSMutableDictionary的实例),您甚至可以使用相同的机制修改该值,例如:
[contactDict setValue:@"Herndon" forKeyPath:@"addresses.home.city"];发布于 2012-09-19 16:29:32
THis将返回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"];https://stackoverflow.com/questions/12490970
复制相似问题