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.