Napisałem prostą aplikację opartą na UINavigationController z dwoma ViewControllers;

W pierwszym kontrolerze widoku mam ten kod

-(IBAction)loadSecondView
{
    SecondView *secondView = [[SecondView alloc]init];
    [secondView setTotal:self.total];
    [self.navigationController pushViewController:secondView animated:YES];
    [secondView release];
    [self.navigationController popViewControllerAnimated:YES];
}

W drugim widoku mam etykietę stworzoną programowo.

.....

 [self.playerNameField addTarget:self 
                              action:@selector(textFieldFinished:) 
.....

- (IBAction)textFieldFinished:(id)sender
{
    [sender resignFirstResponder];
}

Problem polega na tym, że po dotknięciu przycisku klawiatury dochodzi do awarii aplikacji.

[SecondView performSelector:withObject:]: message sent to deallocated instance 0x522af60

Rozumiem, na czym polega problem, ale nie mogę zrozumieć, dlaczego tak się dzieje.

Popraw mnie, jeśli się mylę.

SecondView *secondView = [[SecondView alloc]init]; // retain 1
[self.navigationController pushViewController:playersNames animated:YES]; //secondView have retain of 2
[secondView release]; // now secondView should have retain of 1
0
foho 7 marzec 2012, 13:11

2 odpowiedzi

Najlepsza odpowiedź

Dlaczego naciskasz, a potem wyskakujesz kontroler nawigacyjny, po naciśnięciu widok powinien się przełączyć i powinien pojawić się kontroler PlayerName z jego widokiem.

Nie jest też dla mnie jasne, dlaczego otrzymujesz instancję secondView, ale nigdy jej nie używaj. Pchnięcie na NavigationController powinno zachować kontroler, ale wydaje się, że SecondView nigdy nie zostanie zachowane, a kiedy go użyjesz, poprzedni kontroler go zwolnił.

1
Leonardo 7 marzec 2012, 13:21

Nie rozumiem tego:

SecondView *secondView = [[SecondView alloc]init];
[self.navigationController pushViewController:playersNames animated:YES]; 
[secondView release];

Czy próbujesz dodać secondView do nawigatora? byłoby tak:

 SecondView *secondView = [[SecondView alloc]init];
[self.navigationController pushViewController:secondView animated:YES]; 
[secondView release];
0
Antonio MG 7 marzec 2012, 13:19