首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >NSDictionary内部的NSDictionary

NSDictionary内部的NSDictionary
EN

Stack Overflow用户
提问于 2012-09-19 16:26:34
回答 4查看 13.3K关注 0票数 9

好的,我有一个.plist文件

其中我有一个NSDictionary *StoredAddresses

StoredAddresses内部,是另一把NSDictionary

我知道我可以用,

代码语言:javascript
复制
if ([dictionaryOfAddresses objectForKey:@"StoredAddresses"])

访问顶级NSDictionaries,但是如何在存储的地址中搜索关键字呢?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2012-09-19 16:32:23

好吧,如果我没看错的话,字典里面有字典。它的工作原理与任何其他对象一样:

代码语言:javascript
复制
NSDictionary* Address=[dictionaryOfAddresses objectForKey:@"Home Address"];
NSString* Street=[Address objectForKey:@"Street"];

如果需要,您可以合并这些调用:

代码语言:javascript
复制
NSString* Street=[[dictionaryOfAddresses objectForKey:@"Home Address"] objectForKey:@"Street"];
票数 14
EN

Stack Overflow用户

发布于 2012-09-19 20:49:56

您可以使用NSKeyValueCoding方法valueForKeyPath:来访问嵌套对象的属性。例如,给定以下字典...

代码语言:javascript
复制
NSDictionary *homeAddressDict = @{ @"street" : @"2 Elm St.", @"city" : @"Reston" };
NSDictionary *addressesDict = @{ @"home" : homeAddressDict };

...you可以访问嵌套的home字典的值,如下所示:

代码语言:javascript
复制
NSString *street = [addressesDict valueForKeyPath:@"home.street"];
NSString *city = [addressesDict valueForKeyPath:@"home.city"];

这对于嵌套更深的路径也是如此,例如:

代码语言:javascript
复制
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方法或名为 NSDictionarycity的实例变量(或名为_street_city<代码>E217的实例变量),而不是使用家庭地址的代码,并且仍然以相同的方式访问它。

如果包含目标属性的对象是可变的(例如,NSMutableDictionary的实例),您甚至可以使用相同的机制修改该值,例如:

代码语言:javascript
复制
[contactDict setValue:@"Herndon" forKeyPath:@"addresses.home.city"];
票数 3
EN

Stack Overflow用户

发布于 2012-09-19 16:29:32

THis将返回StoredAddresses内部的键的数组

代码语言:javascript
复制
yourArray=[[dictionaryOfAddresses objectForKey:@"StoredAddresses"] allKeys];

然后,您可以打印yourArray并查看密钥,然后在知道密钥之后,您可以使用

代码语言:javascript
复制
dict=[[dictionaryOfAddresses objectForKey:@"StoredAddresses"] objectForKey:[yourArray objectAtIndex:index_for_that_key]];

代码语言:javascript
复制
dict=[[dictionaryOfAddresses objectForKey:@"StoredAddresses"] objectForKey:@"key_for_your_dict"];
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12490970

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档