Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/119.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios NSTaggedPointerString objectForKey在objective-c中_Ios_Objective C_Json_Nsjsonserialization - Fatal编程技术网

Ios NSTaggedPointerString objectForKey在objective-c中

Ios NSTaggedPointerString objectForKey在objective-c中,ios,objective-c,json,nsjsonserialization,Ios,Objective C,Json,Nsjsonserialization,当我尝试从JSON结果获取结果时。它抛出以下异常 Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[NSTaggedPointerString objectForKey:]: unrecognized selector sent to instance 0xa006449656c6f526' 我的密码 NSString *responseStringWithEncoded =

当我尝试从JSON结果获取结果时。它抛出以下异常

Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[NSTaggedPointerString objectForKey:]: unrecognized selector sent to instance 0xa006449656c6f526'
我的密码

 NSString *responseStringWithEncoded = [[NSString alloc] initWithData: mutableData encoding:NSUTF8StringEncoding];
id jsonObjects = [NSJSONSerialization JSONObjectWithData:
                  mutableData options:NSJSONReadingMutableContainers error:nil];
 for (NSDictionary *dataDict in jsonObjects) {   
  NSString *firstname = [dataDict objectForKey:@"FirstName"];
  }
上述代码抛出一个
n异常

我的JSON响应如下所示

{
"IsExternal": 0,
"LoginId": 4,
"EmployeeId": 223,
"FirstName": "GharValueCA",
"RoleId": 4,
"LastName": null,
"Mobile": null,
"AgencyId": 100,
"BranchId": 74
}
任何帮助都将不胜感激。

您应该打电话

[jsonObjects objectForKey:@"FirstName"];
以获取FirstName值

下面的代码行(可能)返回一个
NSDictionary
,因此这是存储所有json值的容器

id jsonObjects = [NSJSONSerialization JSONObjectWithData:
              mutableData options:NSJSONReadingMutableContainers error:nil];

试试这个代码,希望对你有所帮助

   id jsonObjects = [NSJSONSerialization JSONObjectWithData:
                      mutableData options:NSJSONReadingMutableContainers error:nil];
    if([jsonObjects respondsToSelector:@selector(objectForKey:)]){
         NSString *firstname = [jsonObjects objectForKey:@"FirstName"];
    }

有一个误解:

jsonObjects
已经是字典,立即将反序列化对象分配给
dataDict

NSDictionary *dataDict = [NSJSONSerialization JSONObjectWithData:mutableData 
                                                         options:0
                                                           error:nil]; 
                  // mutableContainers in not needed to read the JSON
枚举对象是字符串、数字或
。您对导致错误的字符串调用了
objectForKey:

直接获取名称(无循环)

或者你可以列举字典

 for (NSString *key in dataDict) {
    NSLog(@"key:%@ - value:%@", key, dict[key]);
 }

根据JSON的定义,每个JSON包含一个对象(可以是包含其他对象的集合类型)。在你的例子中,你的文本以“{”开头,所以这是一本字典。一本字典

因此,
NSJSONSerialization
读取该文件时,会返回一个
NSDictionary
,其中包含IsExternal、FirstName等键下的值

但是,您的代码在该字典上使用
for(…in…
)(根据
NSDictionary
文档,该字典将迭代字典中的键,这些键是字符串),但随后您将这些字符串视为字典

因此,您不应该在字典上循环,而应该直接使用
jsonObjects
中的字典,在字典上调用类似
-objectForKey:
的内容。

尝试以下代码:

if ([jsonObjects isKindOfClass:[NSDictionary class]]) {
    NSString *firstname = [jsonObjects objectForKey:@"FirstName"];
}

由于您的“jsonObjects”是泛型类型“id”,所以只需检查它是否为NSDictionary类型,然后在if块中您可以通过objectForKey直接访问它:

objectForKey将是一个字符串,在objective C中,字符串与“”,它应该是@“”,您应该通过
jsonObjects[@“FirstName”]对此使用缩写
这只会使它对给定的输入永远不起作用。你会好奇为什么被否决的投票者否决了它?有什么不正确的吗?
-[NSTaggedPointerString objectForKey::]:发送给
的无法识别的选择器你正在使用
NSDictionary
方法(
objectForKey:
)在
NSString
对象上。这就是错误所在。
jsonObjects
是一个
NSDictionary
,不需要对其进行for循环,而您的代码表明它是
NSDictionary
NSArray
if ([jsonObjects isKindOfClass:[NSDictionary class]]) {
    NSString *firstname = [jsonObjects objectForKey:@"FirstName"];
}