Objective-C - "成功"不等于"成功"

-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)

Jef*_*mas 5

之前您评论过(从现在删除的答案中)-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)

得到结果.