-1 objective-c nsjsonserialization
基本要点:我从Web服务中获得了一些JSON以验证登录; 那部分有效.我将数组中的值拉入NSDictionary中; 那部分有效.我需要检查一个返回的值,以了解它是否成功.这就是它失败的地方.据我所知,它告诉我"成功"不等于"成功".
NSDictionary *jsonArray = [NSJSONSerialization JSONObjectWithData: response options: NSJSONReadingMutableContainers error: &err];
NSString *result = [jsonArray valueForKey:@"result"];
NSLog(@"%@",result);
if ([result isEqual:@"success"]) {
Run Code Online (Sandbox Code Playgroud)
日志显示"结果"被设置为"成功",但似乎永远不会评估为真.
如果我手动设置"结果":
NSString *result = @"success";
Run Code Online (Sandbox Code Playgroud)
...它进入if语句就好了,所以看起来有些东西我错过了指向数据类型或类似的东西......我只是在这一点上还有其他的尝试.
我通常是一个Web开发人员,但我是iOS的新手,所以我的调试在xcode中仍然有点缺乏,但我熟悉一般逻辑等等.你们给我的任何帮助都会很棒!
编辑:
NSLog显示从Web服务返回的JSON:
2014-01-10 16:22:42.568 LoginTest[1640:70b] (
{
code = 1;
fname = Joe;
lname = Tests;
result = success;
token = 2555f13bce42b14cdc9e60b923bb2b20;
vendornum = 50000000;
}
)
Run Code Online (Sandbox Code Playgroud)
编辑 - 最终工作代码:
NSArray *jsonArray = [NSJSONSerialization JSONObjectWithData: response options: NSJSONReadingMutableContainers error: &err];
NSLog(@"jsonArray: %@", jsonArray);
NSString *result = [jsonArray[0] objectForKey:@"result"];
NSLog(@"%@",result);
if ([result isEqual:@"success"]) {
Run Code Online (Sandbox Code Playgroud)
之前您评论过(从现在删除的答案中)-isEqualToString:抛出一个无法识别的选择器.我相信这是-[__NSCFArray -isEqualToString:]或类似的东西.
根据你的评论,你没有"success",你有[ "success" ]JSON.
这是一个包装字符串值的数组.您需要获取数组的第一个元素并使用它.
[result[0] isEqual:@"success"]
Run Code Online (Sandbox Code Playgroud)
根据日志中的输出,您的JSON不是对象
{
…
"result" = "success"
…
}
Run Code Online (Sandbox Code Playgroud)
它是一个只有一个对象的数组.
[
{
…
"result" = "success"
…
}
]
Run Code Online (Sandbox Code Playgroud)
您正在处理一组数据,因此输出-valueForKey:将是一个数据数组.
@MartinR是正确的,使用起来可能更清楚
[jsonArray[0] objectForKey:@"result"]
Run Code Online (Sandbox Code Playgroud)
得到结果.
| 归档时间: |
|
| 查看次数: |
175 次 |
| 最近记录: |