Ios NSTaggedPointerString objectForKey在objective-c中
当我尝试从JSON结果获取结果时。它抛出以下异常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 =
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"];
}