RSS フィードの検索をサポートする RSS アプリケーションを作成しようとしていました。私のコードは Github にあります (リンク: https://github.com/sammy0025/SST-Announcements )。検索機能を適用しようとしていたView ControllerはSSTAMasterViewControllerです。
Ray Wenderlich の「シンプルな RSS リーダー チュートリアルの作成方法」と「検索をテーブル ビューに追加する方法」のコードを微調整して組み合わせた後、検索バーに入力しようとすると常に次のようなエラーが発生します。
2013-06-02 16:53:44.764 SBlog Feed[2940:c07] -[RSSEntry setTableViewStyle:]: unrecognized selector sent to instance 0x7571930
2013-06-02 16:53:44.765 SBlog Feed[2940:c07] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[RSSEntry setTableViewStyle:]: unrecognized selector sent to instance 0x7571930'
私のfilterContentForSearchTextメソッドと関係があるのではないかと思います:
- (void)filterContentForSearchText:(NSString*)searchText scope:(NSString*)scope
{
[self.searchResults removeAllObjects];
NSPredicate *resultPredicate = [NSPredicate
predicateWithFormat:@"SELF.articleTitle contains[c] %@",
searchText];
searchResults = [NSMutableArray arrayWithArray:[_allEntries filteredArrayUsingPredicate:resultPredicate]];
}
または私の cellForRowAtIndexPath メソッド:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *CellIdentifier = @"Cell"; //Declare Cell Indent
UITableViewCell *cell = [self.tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell==nil) {
cell=[[UITableViewCell alloc]initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier];
}
RSSEntry *entry = [_allEntries objectAtIndex:indexPath.row]; //Makes individual entities for the entry
NSDateFormatter * dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setTimeStyle:NSDateFormatterMediumStyle];
[dateFormatter setDateStyle:NSDateFormatterMediumStyle];
NSString *articleDateString = [dateFormatter stringFromDate:entry.articleDate];
cell.textLabel.text = entry.articleTitle;
cell.detailTextLabel.text = [NSString stringWithFormat:@"%@", articleDateString];
if (tableView==self.searchDisplayController.searchResultsTableView)
{
cell=[searchResults objectAtIndex:indexPath.row];
}
else
{
cell.textLabel.text=entry.articleTitle;
cell.detailTextLabel.text=[NSString stringWithFormat:@"%@",articleDateString];
}
return cell;
}
それにもかかわらず、私はこれらのコードを強く疑っています。
-(BOOL)searchDisplayController:(UISearchDisplayController *)controller shouldReloadTableForSearchString:(NSString *)searchString {
[self filterContentForSearchText:searchString scope:
[[self.searchDisplayController.searchBar scopeButtonTitles] objectAtIndex:[self.searchDisplayController.searchBar selectedScopeButtonIndex]]];
return YES;
}
そしてこれは内部の if (tableView==self.searchDisplayController.searchResultsTableView)
cell=[searchResults objectAtIndex:indexPath.row];
私の主な質問は、この場合、インターネットにフックする可変配列内での検索を実際に許可するにはどうすればよいかということです。