ios - NSDictionary 被视为 bool 值 - 无法调试

标签 ios objective-c xcode debugging

NSDictionary *tokenData = [[responseDict objectForKey:@"data"] objectForKey:@"multipass"];
dispatch_async(dispatch_get_main_queue(), ^{
    NSString *card = [NSString stringWithFormat:@"%@-%@",
        [[UserAccount sharedInstance] cardNumber],
        [tokenData objectForKey:@"CardPhoneToken"]]; //<-- problem
});

从昨天开始,我一直在与这行代码作斗争。我正在从服务器获取 JSON 提要,我的问题是,十有八九是 tokenData返回 0而不是 Dictionary我不知道为什么。当它返回 0它也被编译器视为 bool 值(也不知道为什么),我收到错误 -[NSCFBoolean objectForKey:]: unrecognized selector sent to instance 0x81aa20
我试过做这样的事情if(!tokenData) { NSLog(@"This is going to crash"); }但是当tokenData返回 0 if没有被调用。

esponseDict JSON 我得到:{ code = 200; data = { multipass = { CardPhoneBarcodeToken = 562431; CardPhoneToken = 23221; errorMessage = ""; operationResult = 0; }; }; }
这是它在崩溃之前的样子:{ code = 200; data = { multipass = 0; }; }
更新:如果tokenData,我已设法采取行动不是 NSDictionary现在我面临 else 的另一个问题部分。如果 tokenData 不是 NSDictionary,我如何重新加载它? ?我尝试调用 *tokenData = [[responseDict objectForKey:@"data"] objectForKey:@"multipass"];在 else 里面,但我不断得到 tokenData = 0
谢谢

最佳答案

我会检查 tokenDataNSDictionary在解析它之前。

-(void)loadData
{
    NSDictionary *tokenData = [[responseDict objectForKey:@"data"] objectForKey:@"multipass"];
    dispatch_async(dispatch_get_main_queue(), ^{
        NSString *cardPhoneToken = @"";
        if( [tokenData isKindOfClass:[NSDictionary class]] ){
            retryCount = 0;
            cardPhoneToken = [tokenData objectForKey:@"CardPhoneToken"];
        } else {
            NSLog(@"failed to load data, retrying...");
            retryCount++;
            if( retryCount < 5 ){
                [self loadData];
                return;
            } else {
                NSLog(@"failed after 5 retries");
            }

        }
        NSString *card = [NSString stringWithFormat:@"%@-%@",
                          [[UserAccount sharedInstance] cardNumber],
                          cardPhoneToken];

    });
}

关于ios - NSDictionary 被视为 bool 值 - 无法调试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14230881/

相关文章:

iphone - 如何检测用户是否直接单击 cell.imageView 而不是 tableview 单元格中的标签?

ios - 如何提高 libssh2 NMSSH Framework ios 的性能

ios - 使用 baseapi.h 方法 Teseract iOS

ios - 在 Swift 中获取设备方向

ios - Xcode:从屏幕上删除文本数组

ios - UIOffsetMake() 是使用传统的左上角原点 (0,0) 还是左下角原点?

ios - 由于图像加载问题,应用程序速度变慢

objective-c - XCode 在断点处多次停止

ios - Xcode 对带有 M1 芯片的 Macmini 抛出 arm64 架构错误

当 Podfile 具有 'use_frameworks!' 选项时,iOS 应用程序崩溃