Я получил то же сообщение об ошибке при назначении одного и того же UIBarButtonItem
нескольким элементам навигации, что и Льюис.Мой пример был немного сложнее, так как я использовал UISplitViewController
.
В моем RootViewController
у меня есть массив массивов для выполнения нескольких разделов в моей таблице.Каждый раз, когда пользователь щелкает строку в таблице, новый контроллер представления «подробно» помещается на правой панели моего splitViewController.До установки leftBarButtonItem = nil
я получал бы segfault после 3-4 нажатий кнопки «Меню» с той же ошибкой, что и a111.Я обновил свой код, чтобы фактически извлечь предыдущий контроллер подробного представления и установить для элемента leftBarButtonItem значение nil.
allData
- это мой NSMutableArray, который содержит несколько других NSMutableArrays как объекты.
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
// Retrieve the new detail view controller
UIViewController *detailViewController = [[self.allData objectAtIndex:indexPath.section] objectAtIndex:indexPath.row];
// Add the detail view controller to a navigation controller and set the bar style
UINavigationController *detailNavigationController = [[UINavigationController alloc] initWithRootViewController:detailViewController];
detailNavigationController.navigationBar.barStyle = [[NSUserDefaults standardUserDefaults] integerForKey:@"UIBarStyle"];
// Retrieve previous detail view controller and remove the leftBarButtonItem
UINavigationController *previousDetailNavigationController = [splitViewController.viewControllers objectAtIndex:1];
UIViewController *previousDetailViewController = [[previousDetailNavigationController viewControllers] lastObject];
previousDetailViewController.navigationItem.leftBarButtonItem = nil;
// Update the split view controller's view controllers array.
NSArray *viewControllers = [[NSArray alloc] initWithObjects:self.navigationController, detailNavigationController, nil];
splitViewController.viewControllers = viewControllers;
[detailNavigationController release];
[viewControllers release];
// Dismiss the popover if it's present.
if (popoverController != nil) {
[popoverController dismissPopoverAnimated:YES];
}
// This sets the left bar to nil when in landscape and equal to "Menu" when in portrait.
// We need to remove rootPopoverButtonItem from the previous viewController...
detailViewController.navigationItem.leftBarButtonItem = rootPopoverButtonItem;
}
Сначала сообщение об ошибке немного обманывало, но ответы, приведенные выше, помогли мне.Интересно, почему я мог нажимать кнопку «Меню» до 3-4 раз до сегфоута ... Я буду исследовать дальше.