从Dictionary中检查布尔值。

时间:2012-09-16 21:29:18

标签: ios xcode

我有一个名为atnding的变量从JSON提要中提取。检查对象被解释为什么类类型后,我将其记录为:

attending var type is: __NSCFBoolean

使用[varname class]完成此操作以获取变量的类类型。

所以我想看看这是真还是假....所以我写这段代码..:

if([[_events objectAtIndex:indexPath.row] objectForKey:@"attending"] == YES){

但是我无法编译它,因为它给我一个黄色文本错误说:

enter image description here

我做错了什么?我怎样才能解决这个问题。只是在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";
},

2 个答案:

答案 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];
     }
}