我的SearchDisplayController不能很好地处理UIViewController中的UITableView

这里我在UIViewController的顶部有一个search栏,在search栏下面也有一个UITableView。 当我不search的东西,tableView可以显示的东西很好,但是当我search时,searchResultTableView只能显示一些白色的单元格,而不是正确的结果。

这是.h文件:

#import <UIKit/UIKit.h> @interface MySearchViewController : UIViewController <UITableViewDelegate, UITableViewDataSource> @property (weak, nonatomic) IBOutlet UITableView *myTableView; - (void)reloadView; @end 

这里是.m文件:

 #import "MySearchViewController.h" #import "MyEventInfo.h" #import "MyEventTableViewCell.h" #import "MyEventDetailViewController.h" @interface MySearchViewController () @property NSUserDefaults *usrDefault; @end @implementation MySearchViewController { NSMutableArray *events; NSArray *searchResults; } - (void)viewDidLoad { [super viewDidLoad]; self.usrDefault = [NSUserDefaults standardUserDefaults]; events = [[NSMutableArray alloc] init]; [self extractEventArrayData]; } - (void)viewWillAppear:(BOOL)animated { [super viewWillAppear:YES]; [self reloadView]; } - (void)reloadView { NSLog(@"reloadView"); events = [[NSMutableArray alloc] init]; [self extractEventArrayData]; [self.myTableView reloadData]; } - (void)didReceiveMemoryWarning { [super didReceiveMemoryWarning]; // Dispose of any resources that can be recreated. } - (void)extractEventArrayData { NSArray *dataArray = [[NSArray alloc] initWithArray:[self.usrDefault objectForKey:@"eventDataArray"]]; for (NSData *dataObject in dataArray) { MyEventInfo *eventDecodedObject = [NSKeyedUnarchiver unarchiveObjectWithData:dataObject]; [events addObject:eventDecodedObject]; } } - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { if (tableView == self.myTableView) { return [events count]; } else { NSLog(@"searchResults count:%lu",(unsigned long)[searchResults count]); return [searchResults count]; } } - (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath { return 360; } - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { static NSString *CellIdentifier = @"CustomTableCell"; MyEventTableViewCell *cell = (MyEventTableViewCell *)[tableView dequeueReusableCellWithIdentifier:CellIdentifier]; // Configure the cell... if (cell == nil) { cell = [[MyEventTableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier]; } // Display MyEventTableViewCell in the table cell MyEventInfo *event = nil; if (tableView == self.myTableView) { event = [events objectAtIndex:indexPath.row]; } else { event = [searchResults objectAtIndex:indexPath.row]; NSLog(@"name of event:%@", event.nameOfEvent); } cell.nameOfEvent.text = event.nameOfEvent; cell.imageOfEvent.image = [UIImage imageNamed:event.imageOfEvent]; cell.timeOfEvent.text = event.timeOfEvent; cell.locationOfEvent.text = event.locationOfEvent; cell.dateOfEvent.text = event.dateOfEvent; return cell; } - (void)filterContentForSearchText:(NSString*)searchText { NSPredicate *resultPredicate = [NSPredicate predicateWithFormat:@"nameOfEvent contains[c] %@", searchText]; searchResults = [events filteredArrayUsingPredicate:resultPredicate]; } -(BOOL)searchDisplayController:(UISearchDisplayController *)controller shouldReloadTableForSearchString:(NSString *)searchString { [self filterContentForSearchText:searchString]; return YES; } @end 

而在故事板上,我已经将tableView的委托和数据源设置为self。 这让我疯狂,我无法弄清楚什么是错的。 有人能帮我吗? 谢谢。

在search时,单元格的对象全部为空,本身没有任何东西

当不search时,单元格与事件的内容相同