PopoverController - освобожденный экземпляр - PullRequest
0 голосов
/ 09 февраля 2012

когда я нажимаю кнопку popover в моем splitviewcontroller, я получаю сообщение: сообщение отправлено на освобожденный экземпляр 0x6a66ca0

Я уже обнаружил, что этот экземпляр должен быть контроллером detailview, который я выделяю и инициализирую.Все идет нормально.Но я не вижу проблемы, пока все не работает.

Прежде всего AppDelegate, где я создаю Splitview:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{

    // TestViews for SplitViewController 
    // TestView1 *test1 = [[TestView1 alloc] initWithNibName:@"TestView1" bundle:nil];

    // TableView as RootViewController for the Left Hand Pane
    RootViewTableViewController *rootViewTableViewController = [[RootViewTableViewController alloc] initWithNibName:@"RootViewTableView" bundle:nil];
    UINavigationController *rootNavigationController = [[UINavigationController alloc] initWithRootViewController:rootViewTableViewController];

    DetailViewController *detailViewController = [[DetailViewController alloc] initWithNibName:@"DetailView" bundle:nil];
    UINavigationController *detailNavigationController = [[UINavigationController alloc] initWithRootViewController:detailViewController];

    self.splitViewController = [[UISplitViewController alloc] init];
    self.splitViewController.delegate = detailViewController;
    self.splitViewController.viewControllers = [NSArray arrayWithObjects:rootNavigationController,detailNavigationController, nil];
    self.window.rootViewController = self.splitViewController;

    [self.window makeKeyAndVisible];
    return YES;
}

Сначала я подумал о строке кода self.splitviewcontroller.delegate = detailviewcontroller;может быть проблема ..... но все приложение запускается отлично.только когда я нажимаю на кнопку, появляется эта проблема.

RootViewController это (я упустил стандартные методы делегата табличного представления для ясности)

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
    if (self) {

        // Set Title of the TableView for the RootViewController
        self.title = @"Notarzteinsatzprotokoll";
        self.clearsSelectionOnViewWillAppear = NO;
        self.contentSizeForViewInPopover = CGSizeMake(320.0, 600.0);
    }
    NSLog(@"INIT %p", self);
    return self;
}

- (void)viewDidLoad {
    [super viewDidLoad];
    [self.tableView selectRowAtIndexPath:[NSIndexPath indexPathForRow:0 inSection:0] animated:NO scrollPosition:UITableViewScrollPositionMiddle];
}

и контроллер подробного представления:

#pragma mark -
#pragma mark Managing the Detail Item

- (void)setDetailItem:(id)newDetailItem
{
    if (_detailItem != newDetailItem) {
        _detailItem = newDetailItem;

        // Update the view
        [self configureView];
    }

    if (self.rootPopoverController != nil) {
        [self.rootPopoverController dismissPopoverAnimated:YES];
    }
}

- (void)configureView
{
    // Update the user interface for the detail item

    if (self.detailItem) {
        self.detailDescriptionLabel.text = [self.detailItem description];
    }
}


- (void)viewDidLoad {
    [super viewDidLoad];
    [self setTitle:@"Notarzteinsatzprotokoll"];
    [self configureView];
}

#pragma mark -
#pragma mark Rotation Support

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation {
    return YES;
}


#pragma mark -
#pragma mark SplitView

- (void)splitViewController:(UISplitViewController *)svc willHideViewController:(UIViewController *)aViewController withBarButtonItem:(UIBarButtonItem *)barButtonItem forPopoverController:(UIPopoverController *)pc {
    barButtonItem.title = @"Master";
    [self.navigationItem setLeftBarButtonItem:barButtonItem animated:YES];
    self.rootPopoverController = pc;
}

- (void)splitViewController:(UISplitViewController *)svc willShowViewController:(UIViewController *)aViewController invalidatingBarButtonItem:(UIBarButtonItem *)barButtonItem {
    [self.navigationItem setLeftBarButtonItem:nil animated:YES];
    self.rootPopoverController = nil;
}

Я не вижу точки, в которой поток программ освобождает объекты detailviewcontroller и что-то еще пытается отправить сообщение ... мне нужно поменять местами некоторые строки кода?

Спасибо!Себастьян

@end

1 Ответ

0 голосов
/ 09 февраля 2012

ошибка должна сообщить вам, какое сообщение отправляется в освобожденный экземпляр.Не знаете точно, в чем проблема, является ли это setTitle: сообщение, отправляемое элементу левой панели?

В splitViewController: willShowViewController: вы устанавливаете элемент кнопки левой панели в nil (который будет освобождать его)в splitViewController: willHideViewController: вы пытаетесь изменить его заголовок, что может быть вашей проблемой.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...