【发布时间】:2017-05-09 12:38:12
【问题描述】:
我有一个名为“thisList”的 NSDictionary,我需要获取它的键“list_collection”的值。
Xcode 表示该值为“NSSingleEntryDictionary”。
值本身包含一个带有另一个字典的数组。
现在,无论我尝试什么 (objectforKey/valueforKey) 或初始化任何类型的对象 (NSArray/NsMutableArray/NSDictionary/NSMutableDictionary),我最终都会得到一个 nil 值。
显然,我错过了一些有关如何处理此问题的基本知识。
我的问题:我应该如何用键“list_collection”的值初始化一个对象。
这是 json 的(部分)转储:
Printing description of thisList:
{
archived = 0;
"chapter_part" = "";
"chapter_title" = "";
comment = "";
"cover_id" = "<null>";
"created_at" = "2017-01-06T12:59:04.000+01:00";
"date_created" = "06 January 2017";
deleted = 0;
id = 141384502;
isMyList = 1;
keywords = (
);
"list_collection" = {
lists = (
{
"speech_locale" = EN;
subject = engels;
words = (
{
word = attitude;
},
对我来说最合乎逻辑的方法是:
NSDictionary * myDic = [thisList objectForKey:@"list_collection"];
注意:我没有在此处显式初始化“myDic”。
为了把事情放在上下文中,这是我的代码:
NSString * hlists = [json objectForKey:@"lists"];
NSData* data = [hlists dataUsingEncoding:NSUTF8StringEncoding];
NSArray *wrtsLists = [NSJSONSerialization JSONObjectWithData:data options:0 error:&jsonParsingError];
Lists = [[NSMutableArray alloc]init];
for (NSDictionary *thisList in wrtsLists){
WordList* theList = [[WordList alloc]init];
theList.title = [thisList valueForKey:@"title"];
[Lists addObject:theList];
NSDictionary *myDic = thisList[@"list_collection"];
>>>>this is where I put a breakpoint. myDic is nil here
}
感谢您的见解。
【问题讨论】:
-
你能发布一些代码和 JSON 数据吗?这样我们就可以帮助您解决问题。
-
无论你声明你的变量是什么对象类型,如果键是正确的,它就不会是“nil”。类型不匹配可能(将)在以后导致崩溃,但不会使值为零。尝试使用控制台并输入“po thisList.allKeys”,看看您是否正确拼写密钥
-
根据屏幕截图,您的最合乎逻辑的方法应该可以工作。但是我总是更喜欢像
thisList[@"list_collection"]这样的密钥订阅
标签: ios objective-c nsdictionary