2015-10-27 369 views
0

我試圖從Web服務中檢索數據,然後過濾數據並將其存儲在另一個基於值的數組中。不過,我得到以下錯誤,每當我嘗試對其進行過濾: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」]'?數據源是一個包含EventsBean對象的可變數組。它從webserivce填充。 – Paulw11

回答

2

您接收到的數據通過網絡很可能不會成爲EventsBean類的實例。從錯誤日誌中,它看起來實際上是一個NSDictionary對象。我猜它已經從你的JSON字符串中解析出來了。所以我可能會嘗試通過item[@"Month"]來訪問月屬性。

+0

它不是一本字典。不允許我使用項[@「month」] –

+0

我可以使用'EventsBean * bean = [[EventsBean alloc] initWithDictionary:[filteredArray 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:[filteredArray objectAtIndex:indexPath.row]]訪問我的表視圖中的值; ' –

+0

比這是正確的做法...只是首先創建對象,並比代碼 –

相關問題