objectForKey 不返回任何东西

Posted

技术标签:

【中文标题】objectForKey 不返回任何东西【英文标题】:objectForKey not returning anything 【发布时间】:2011-09-13 23:08:10 【问题描述】:
-(NSMutableDictionary *)request:(NSString *)requestString 
    NSString *filepath = [[NSBundle mainBundle] pathForResource:requestString ofType:@"xml"];
    NSError *error = nil;
    respString = [NSString stringWithContentsOfFile:filepath usedEncoding:nil error:&error];
NSLog(@"Ping xml");
    tempDict = [[NSMutableDictionary alloc] initWithDictionary:[parser readXMLString:respString]];
    NSLog(@"%@",tempDict);
return tempDict;

直到那里,一切正常,NSLog 显示 tempDict 中有 2 个对象和键。 但后来:

-(int) authenticateUser 
    NSMutableDictionary *dictionary = [[NSMutableDictionary alloc] initWithDictionary:[self request:@"login"]];
    if ([[dictionary objectForKey:@"sessionId0"] isEqualToString:@"-1"] ) 
        //Some code
    
    else 
        cError = 1;
        NSLog(@"%@",[dictionary objectForKey:@"sessionId0"]);
        appDelegate.sessionId = [dictionary objectForKey:@"sessionId0"];
    
    [dictionary release];
    return cError;

在最后一个 else 中,cError 为 1,NSLog 为该对象输出 nil。 (整个字典的 NSLog 也输出 nil)

【问题讨论】:

你确定[self request:@"login"] 不为零吗?试试 NSLog 到authenticateUser 只是把它扔在那里,但你确定要为结果分配一个新字典,而不是只使用 [self request:] 返回的字典吗?这对您的具体问题没有帮助,只是对于您在这里所做的事情,我不明白您为什么要分配一个全新的字典并将 request: 的结果复制到其中...对于您的实际问题,也许你忘了在这个类的接口中添加 request: 方法? 您的 if 语句检查 [dictionary objectForKey:@"sessionID0"],但在 else 部分检查 [dictionary objectForKey:@"sessionID"]。您在实际代码中的内容是这里的输入错误吗? @Saphrosit 是的,我做到了,它可以正确打印信息。 @wallacer 将检查,感谢您指出。 @sosborn 我纠正了它。在我的代码中,它正确检查了 sessionId0,很抱歉放置了错误的信息。 【参考方案1】:

将此代码放入您的代码中,然后查看 dict 对象的输出...

-(int) authenticateUser 
NSDictionary* dict = (NSDictionary *)[self request:@"login"];
NSLog(@"Dictionary %@",dict);    

NSMutableDictionary *dictionary = [[NSMutableDictionary alloc] initWithDictionary:[self request:@"login"]];
    if ([[dictionary objectForKey:@"sessionId0"] isEqualToString:@"-1"] ) 
        //Some code
    
    else 
        cError = 1;
        NSLog(@"%@",[dictionary objectForKey:@"sessionId"]);
        appDelegate.sessionId = [dictionary objectForKey:@"sessionId"];
    
    [dictionary release];
    return cError;

【讨论】:

以上是关于objectForKey 不返回任何东西的主要内容,如果未能解决你的问题,请参考以下文章

iOS中的objectForKey,JSON?不工作!

“任何”的值类型没有成员 'objectforKey' Swift 3 转换

使用 objectForKey 返回错误类型的键

NSDictionary objectForKey 返回值

IOS开发之——objectForKey与valueForKey在NSDictionary中的差异

为啥调用存储过程不返回任何东西?