【问题标题】:__NSCFConstantString objectForKey unrecognized selector sent to instance error__NSCFConstantString objectForKey unrecognized selector sent to instance error
【发布时间】:2013-09-11 09:56:57
【问题描述】:

我基本上得到了这个错误

'NSInvalidArgumentException', reason: '-[__NSCFConstantString objectForKey:]: unrecognized selector sent to instance 0x581f0'

在我的节目中。我想它指的是我打的这个电话,

if (data != nil) {
    if([data objectForKey:@"username"]){
       // NSArray *check= [[NSArray alloc]init];
        //check=[data allValues];
        [dict setObject:[data allValues] forKey:@"args"];

    }else{
    [dict setObject:[NSArray arrayWithObject:data] forKey:@"args"];
}

在 setObject:[data allValues]。我不知道为什么它会给出这个错误,但是 data 是一个 NSDictionary 并且我正在获取所有值并将其放入一个数组中。

【问题讨论】:

  • 在“if (data != nil)”之后,记录 [data class] 并查看它给出的结果。
  • @rdelmar 感谢您的提示。它显示了问题。首先它返回 NSMutableDictionary 然后是一个字符串。所以我现在的问题是,有没有办法检查某些东西是否是字典?
  • if([data isKindOfClass:[NSDictionary class]]) 怎么样
  • @rdelmar 谢谢。我已经在网上找到了,但再次感谢。
  • 似乎是一个设计缺陷,您在需要 NSDictionary 的地方使用 NSString 调用此方法。

标签: ios objective-c


【解决方案1】:

这里是否发生错误:

    if([data objectForKey:@"username"]){

我假设是这样,因为这是 objectForKey 似乎被调用的唯一地方。您在一个名为“数据”的变量上调用它,我猜它根本不是字典。你应该 NSLog 它的类型来查看。

【讨论】:

  • @darren 是的,它首先返回一个 _NSDictionaryM,然后是一个字符串。这实际上可以追溯到我最初想要的。有没有办法检查您使用的值是否是 NSDictionary?
  • 有办法检查,当然。但是您的情况听起来像是一个令人讨厌的记忆问题(如果我理解正确的话)。你是说有时当你登录时你会得到一本字典,有时你会得到一个字符串?这种错误有时意味着 aj 对象的过度释放(你在使用 arc 吗?)。运行时正在释放您的原始字典并使用该旧空间来放置一个新的字符串对象。
  • 如果你真的想检查“数据”是什么类型,你会做类似 if ([data isKindOfClass:[NSDictionary class]] )
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-05-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-07-13
相关资源
最近更新 更多