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谢谢
最佳答案
我会检查 tokenData
是 NSDictionary
在解析它之前。
-(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/