由于未捕获的异常,SIGABRT 终止应用程序

SIGABRT terminating an app due to uncaught exception

我正在尝试从 Web 服务检索数据,然后过滤数据并根据值将其存储在另一个数组中。但是,每当我尝试过滤它时,我都会收到以下错误:

*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[__NSCFDictionary Month]: unrecognized selector sent to instance 0x174079640'

这是我的代码:

- (void)getDataHTTPClient:(Client *)client didUpdateWithData:(id)data
{
    [self.view setUserInteractionEnabled:YES];

    if (isPullRefresh)
    {
        isPullRefresh = NO;
        [datasource removeAllObjects];
        [self.pullToRefreshView finishLoading];
    }

    NSMutableArray *array = (NSMutableArray *)data;
    if (![array count])
    {
        isNewsEnded = YES;
        [self.tableView reloadData];
        return;
    }
    [hud hide:YES];

    [datasource addObjectsFromArray:(NSMutableArray *) data];
    NSDate *currentDate = [NSDate date];
    NSCalendar* calendar = [NSCalendar currentCalendar];
    NSDateComponents* components = [calendar         components:NSYearCalendarUnit|NSMonthCalendarUnit|NSDayCalendarUnit fromDate:currentDate];
    monthInt= [components month];
    NSLog(@"month %li", monthInt);
    NSLog(@"month after deduction %li", monthInt-1);

    monthString = [NSString stringWithFormat:@"%zd",monthInt];

    for (EventsBean *item in datasource)
    {
        if([item.Month isEqualToString:monthString])
        {
            [filteredArray addObject:item];
        }
    }
    [self.tableView reloadData];

    if ([datasource count])
    {
        [self displayNoRecordMSG:NO];
    }
    else
    {
        [self displayNoRecordMSG:YES];
    }
}

错误显示在这一行

 if([item.Month isEqualToString:monthString])
{
    [filteredArray addObject:item];
}

您通过网络收到的数据很可能不是 EventsBean class 的实例。从错误日志来看,它实际上是一个 NSDictionary 对象。我猜它已经为您从 JSON 字符串中解析出来了。所以我可能会尝试通过 item[@"Month"] 来访问月份 属性。

 for (EventsBean *item in datasource)

这里的数据源包含 NSDictionaries 的对象而不是 EventBeans 的对象。

您需要解析该字典并创建 EventsBean 对象

你需要做这样的事情

if([[item objectForKey:@"Month"] isEqualToString:monthString])