2013-06-18 37 views
0

我正在構建一個iOS應用程序,其中有一個車輛庫存號列表,我需要搜索特定的應用程序。tableView:numberOfRowsInSection搜索時出錯

我已經實現了UITableView所需的方法,並設置委託和源等,我的桌面視圖出現並完美工作。

的奇數部分是,當我在頂部鍵入任何東西到搜索框(其由提供「的搜索欄和搜索顯示控制器」預先製作的對象)時,該應用程序崩潰:

*終止應用程序由於未捕獲的異常 'NSInvalidArgumentException',原因是: ' - [CarLocateViewController 的tableView:numberOfRowsInSection:]:無法識別的選擇發送到 例如0x757d340'

這是奇怪的,BEC ause我已經實現了tableView:numerOfRowsInSection:

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section 
{ 
    // Return the number of rows in the section. 
    NSLog(@"Defining rows for table view: %i", allVehicles.count); 
    return allVehicles.count; 
} 

而且這對於自己的表視圖是完美的。

我也有搜索方法設置:

-(void)filterContentForSearchText:(NSString*)searchText scope:(NSString*)scope { 
    [self.filteredVehicles removeAllObjects]; 
    NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SELF.name contains[c] %@", searchText]; 
    filteredVehicles = [NSMutableArray arrayWithArray:[allVehicles filteredArrayUsingPredicate:predicate]]; 
} 

-(BOOL)searchDisplayController:(UISearchDisplayController *)controller shouldReloadTableForSearchString:(NSString *)searchString { 
    [self filterContentForSearchText:searchString 
           scope:[[self.searchDisplayController.searchBar scopeButtonTitles] objectAtIndex:[self.searchDisplayController.searchBar selectedScopeButtonIndex]]]; 
    return YES; 
} 

-(BOOL)searchDisplayController:(UISearchDisplayController *)controller shouldReloadTableForSearchScope:(NSInteger)searchOption { 
    // Tells the table data source to reload when scope bar selection changes 
    [self filterContentForSearchText:self.searchDisplayController.searchBar.text scope: 
    [[self.searchDisplayController.searchBar scopeButtonTitles] objectAtIndex:searchOption]]; 
    // Return YES to cause the search result table view to be reloaded. 
    return YES; 
} 

任何幫助表示讚賞!

+1

這可能是一個愚蠢的問題,但是你的tableview數據源和委託以及'CarLocateViewController'對象內的所需函數是什麼?您提供的代碼並不完全說明這些方法的位置。 – Putz1103

+0

何時以及如何創建所有車輛? –

+0

@ Putz1103 - 這根本不是一個愚蠢的問題;我完全忽略了這一點。我已經在另一個類中爲UITableView設置了我的委託,併爲UISearchBar做了相同的處理,但顯然UISearchBar自動生成的列表自動鎖定到ViewController類。我把所有東西都移到了ViewController中,現在它不會崩潰 - 如果你對此做出回答,我會接受它。我猜這是我閱讀郵件但沒有/真的/閱讀郵件的情況之一。 – malexdev

回答

1

更改評論回答:

這可能是一個愚蠢的問題,而是你的tableview的數據源和委託和CarLocateViewController對象內部所需要的功能?您提供的代碼並不完全說明這些方法的位置。

0

您分配給DataSource的類實例未實現UITableViewDataSource函數。

@interface MyClassController :UIViewController <UITableViewDelegate,UITableViewDataSource> 

嘗試如下。

myTableView.dataSource = self; 
myTableView. delegate = self; 
+0

這就是爲什麼你應該始終遵守協議,在你的頭上,這樣你可以得到編譯器警告,當你不實施所需的協議方法! (評論是不是爲你@iPatel,但一般,作爲你的答案的後續) – Lefteris

+1

但他表示,表第一次正確加載並顯示他的所有數據,因此數據源至少設置爲正確啓動。我認爲他試圖在錯誤的類中搜索tableview數據。 – Putz1103