由于未捕获的异常,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])
我正在尝试从 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])