我有一个名为atnding的变量从JSON提要中提取。检查对象被解释为什么类类型后,我将其记录为:
attending var type is: __NSCFBoolean
使用[varname class]完成此操作以获取变量的类类型。
所以我想看看这是真还是假....所以我写这段代码..:
if([[_events objectAtIndex:indexPath.row] objectForKey:@"attending"] == YES){
但是我无法编译它,因为它给我一个黄色文本错误说:
我做错了什么?我怎样才能解决这个问题。只是在Feed中添加数据如下所示:
{
attendees = (
);
attending = 1;
date = "2012-09-24 09:11:00";
id = 504;
lessonHTML = "somehtml.";
name = "Sup";
youtubeId = "http://www.youtube.com/watch?v=j1vb4cND3G0";
},
{
attendees = (
);
attending = 1;
date = "2012-09-24 09:11:00";
id = 503;
lessonHTML = "somehtml.";
name = "Sup";
youtubeId = "http://www.youtube.com/watch?v=j1vb4cND3G0";
},
{
attendees = (
);
attending = 0;
date = "2012-09-24 09:11:00";
id = 508;
lessonHTML = "somehtml.";
name = "Sup";
youtubeId = "http://www.youtube.com/watch?v=j1vb4cND3G0";
},
{
attendees = (
);
attending = 1;
date = "2012-09-24 09:11:00";
id = 509;
lessonHTML = "somehtml.";
name = "Sup";
youtubeId = "http://www.youtube.com/watch?v=j1vb4cND3G0";
},
{
attendees = (
);
attending = 0;
date = "2012-09-24 09:11:00";
id = 505;
lessonHTML = "somehtml.";
name = "Sup";
youtubeId = "http://www.youtube.com/watch?v=j1vb4cND3G0";
},
{
attendees = (
);
attending = 1;
date = "2012-09-24 09:11:00";
id = 506;
lessonHTML = "somehtml.";
name = "Sup";
youtubeId = "http://www.youtube.com/watch?v=j1vb4cND3G0";
},
答案 0 :(得分:19)
字典和其他容器类中的布尔值封装在NSNumber
个对象中(有关详细信息,请参阅NSNumber
文档)
要提取您需要将boolValue
消息发送到从字典中检索到的对象并将其与YES / NO进行比较所需的值:
NSNumber* attendingObject = [[events objectAtIndex:indexPath.row] objectForKey:@"attending"];
if ([attendingObject boolValue] == YES)
{
...
}
详细了解值及其封装方式我的集合类in the Apple documentation here
答案 1 :(得分:2)
“BOOL
”类型不是Objective C对象,而是C风格类型。
它作为“NSNumber
”对象存储在字典中。
那么你需要做什么而不是:
if([[_events objectAtIndex:indexPath.row] objectForKey:@"attending"] == YES){
是这样的:
BOOL attending = NO; // assume NO to start with
NSDictionary * lessonDictionary = [_events objectAtIndex: indexPath.row];
if(lessonDictionary)
{
NSNumber * attendingObject = [lessonDictionary objectForKey: @"attending"];
if(attendingObject)
{
attending = [attendingObject boolValue];
}
}