2015-10-27 11 views
0

Я пытаюсь извлечь данные из веб-службы, а затем отфильтровать данные и сохранить их в другом массиве на основе значения. Тем не менее, я получаю следующее сообщение об ошибке, когда я пытаюсь фильтровать:SIGABRT завершает приложение из-за неотображенного исключения

*** 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]; 
} 
+0

Пожалуйста, авторизуйтесь значение '' data' и datasource' , Вы получаете неправильный тип товара. – anhtu

+0

Что такое содержимое массива 'datasource' и как оно заполнено? –

+0

'item' похоже NSDictionary - может быть, вы хотите' item [@ "month"] '? – Paulw11

ответ

2

Данные, которые вы получили по сети, скорее всего, не будет экземпляром класса EventsBean. Из журнала ошибок это похоже на объект NSDictionary. Я предполагаю, что он уже разбирается в строке JSON для вас. Поэтому я, вероятно, попытаюсь получить доступ к свойству месяца, сделав вместо этого item[@"Month"].

+0

его не словарь. не позволяет мне использовать элемент [@ "month"] –

+0

Я могу получить доступ к значениям в моем представлении таблицы с помощью 'EventsBean * bean = [[EventsBean alloc] initWithDictionary: [filterArray objectAtIndex: indexPath.row]]; ' –

+0

Что! Вы понимаете, что подразумевают, что у вас есть объекты NSDictionary' в вашем отфильтрованном списке, а также ваш источник данных, правильно? В случае, если вы можете получить доступ только к данным через класс EventsBean, почему бы не сделать '[[EventsBean alloc] initWithDictionary: item] .Month'? –

1
for (EventsBean *item in datasource) 

Здесь datasource содержит объекты NSDictionaries, а не объекты EventBeans.

Либо вам нужно разобрать, что словарь и создать объект EventsBean

Или

Вам нужно сделать что-то вроде этого

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

его не словарь, не позволяет мне использовать objectforkey –

+0

Я могу получить доступ к значениям в моем представлении таблицы с помощью 'EventsBean * bean = [[EventsBean alloc] initWithDictionary: [filterArray objectAtIndex: indexPath.row]]; ' –

+0

Чем это правильная вещь ...просто создайте объект первым, а затем сравните месяц в коде –

Смежные вопросы