Instanciation correcte de UISearchDisplayController

J'ai fait quelques searchs et la réponse n'est toujours pas claire pour moi. J'essaye de créer une instance d'un UISearchDisplayController dans un TableViewController (TVC).

Dans l'en-tête de mon TVC, j'ai déclaré searchDisplayController en tant que propriété:

@interface SDCSecondTableViewController : UITableViewController @property (nonatomic, strong) NSArray *productList; @property (nonatomic, strong) NSMutableArray *filteredProductList; @property (nonatomic, strong) UISearchDisplayController *searchDisplayController; @end 

Cela entraîne l'erreur:

Propriété 'searchDisplayController' essayant d'utiliser la variable d'instance '_searchDisplayController' déclarée dans la super class 'UIViewController'

L'ajout de @synthesize searchDisplayController dans le file d'implémentation s'est débarrassé des erreurs.

Quelqu'un peut-il m'aider s'il vous plaît à comprendre cette erreur? J'utilise Xcode 4.6.2, mais j'avais l'printing que les propriétés sont automatiquement synthétisées à partir de Xcode 4.4.

Vous ne devez pas appeler [self performSelector:@selector(setSearchDisplayController:) withObject:searchDisplayController]; comme l'a suggéré LucOlivierDB. C'est un appel d'API privé qui fera rejeter votre application par Apple (je sais parce que cela m'est arrivé). Au lieu de faire cela:

 @interface YourViewController () @property (nonatomic, strong) UISearchDisplayController *searchController; @end @implementation YourViewController -(void)viewDidLoad{ [super viewDidLoad]; UISearchBar *searchBar = [[UISearchBar alloc] initWithFrame:CGRectMake(0, 0, 320, 44)]; searchBar.delegate = self; self.searchController = [[UISearchDisplayController alloc] initWithSearchBar:searchBar contentsController:self]; self.searchController.delegate = self; self.searchController.searchResultsDataSource = self; self.searchController.searchResultsDelegate = self; self.tableView.tableHeaderView = self.searchBar; 

}

Vous obtenez cette erreur car UIViewController définit une propriété pour searchDisplayController . Redéfinir une autre propriété nommée searchDisplayController dans votre class personnalisée searchDisplayController le compilateur. Si vous voulez définir un UISearchDisplayController , instancier un dans le - (void)viewDidLoad de votre class personnalisée.

Exemple :

 - (void)viewDidLoad { [super viewDidLoad]; UISearchBar *searchBar = [UISearchBar new]; //set searchBar frame searchBar.delegate = self; UISearchDisplayController *searchDisplayController = [[UISearchDisplayController alloc] initWithSearchBar:searchBar contentsController:self]; [self performSelector:@selector(setSearchDisplayController:) withObject:searchDisplayController]; searchDisplayController.delegate = self; searchDisplayController.searchResultsDataSource = self; searchDisplayController.searchResultsDelegate = self; self.tableView.tableHeaderView = self.searchBar; } 

Vous pouvez vous référer au searchDisplayController en utilisant self.searchDisplayController dans votre class personnalisée.