У меня проблема с приведением типов или областью видимости.Я получаю uncaught exception
:
// Create the object here so that it's scope is outside the `if` statement, right?
searchTableViewController *newViewController;
if (rowSelected) {
// Typecast the object to a searchTableViewController
(searchTableViewController *)newViewController ;
// Initialize and Allocate
newViewController = [[searchTableViewController alloc] initWithSearchBar:NO grouped:NO];
}else{
// Typecast the global object to a personViewController
(personViewController *)newViewController;
// Initialize and Allocate
newViewController = [[personViewController alloc] init];
}
// Act on the object: create a data model object and store it as a property, etc.
newViewController.myDataModel = [[dataModel alloc] initWithSelected:selectedField delegate:newViewController];
У меня есть 2 аналогичных ViewControllers searchTableViewController
и personViewController
.Поэтому я хочу иметь возможность создавать экземпляры одного или другого, используя одно и то же имя, чтобы остальная часть моего кода могла действовать на viewController с использованием общих свойств и т. Д.
Это вызывает Terminating due to uncaught exception
и все равно это казалось неправильным способом сделать это.Мне нужна помощь либо в отделе типов, либо в понимании того, как правильно объявлять область действия этих объектов, чтобы я мог работать с ними внутри и вне оператора if
.
Обновление
Самым простым для меня было бы написать мой код следующим образом.Как я могу объявить, выделить и создать экземпляр объекта внутри оператора if
, а затем сделать его доступным снаружи?:
if (rowSelected) {
searchTableViewController *newViewController = [[searchTableViewController alloc] initWithSearchBar:NO grouped:NO];
}else{
personViewController *newViewController = [[personViewController alloc] init];
}
// This will probably give an error since newViewController is not in the proper scope.
newViewController.myDataModel = [[dataModel alloc] initWithSelected:selectedField delegate:newViewController];