Мне очень трудно заставить это работать.У меня есть два контроллера представления со связанными представлениями, названными DomainSelectionViewController и DomainViewController.Я прохожу учебник по сети разработчиков Apple, который охватывает представление контроллеров представления.Я получаю сигнал EXC_BAD_ACCESS при попытке запуска.
Вот соответствующие выдержки из каждого файла:
DomainSelectionViewController.h
@class DomainViewController;
@interface DomainSelectionViewController : UIViewController
- (IBAction)domainSelected:(id)sender;
- (IBAction)leaveDomain;
@property (retain) DomainViewController * selectedDomain;
@end
domainSelected: прикрепляется к кнопке, которая представляет домен.Нажатие на него успешно заменяет текущее представление в интерфейсе представлением, определенным в пере DomainViewController.
DomainSelectionViewController.m
@implementation
- (IBAction)domainSelected:(id)sender {
NSLog(@"Domain Selected...");
selectedDomain = [[DomainViewController alloc] initWithNibName:@"DomainView" bundle:nil];
selectedDomain.domainSelectionContext = self;
[self presentViewController:selectedDomain animated:NO completion:nil];
}
- (IBAction)leaveDomain {
NSLog(@"Leaving Domain...");
NSLog(@"Presented Domain: %@", self.presentedViewController);
//selectedDomain.modalPresentationStyle = UIModalPresentationFullScreen;
[self dismissViewControllerAnimated:NO completion:nil];
}
DomainViewController.h
#import <UIKit/UIKit.h>
#import "DomainSelectionViewController.h"
@class DomainSelectionViewController;
@interface DomainViewController : UIViewController
//@property (nonatomic, assign) DomainSelectionViewController * presentingViewController;
@property (nonatomic, retain) DomainSelectionViewController * domainSelectionContext;
@end
DomainViewController.m
- (IBAction)exit:(id)sender {
NSLog(@"Leaving Domain...");
if(self.presentingViewController) {
NSLog(@" Dismissing View Controller: %@.", self.presentingViewController);
[self.domainSelectionContext leaveDomain];
//[self.presentingViewController dismissViewControllerAnimated:NO completion:nil];
return;
}
else {
NSLog(@"Presenting view controller not set.");
}
}
Представление домена содержит только одну кнопку, которая читает «назад» и связана с собственным выходом: функция,который, в свою очередь, вызывает метод sendDomain для своего делегата.При нажатии на эту кнопку возникает вызов EXC_BAD_ACCESS.Глядя на другие подобные посты, говорится, что ошибка EXC_BAD_ACCESS обычно возникает при попытке вызвать освобожденный объект, но оператор print незадолго до вызова dismiss показывает, что объекты все еще существуют и на них можно ссылаться.Я надеялся, что кто-то с большим опытом, чем я мог бы взглянуть на это и легко предугадать, что пошло не так.
Для полноты, вот вывод из консоли:
Attaching to process 26860.
2012-03-24 19:23:45.601 domaintest[26860:f803] DomainSelectionView Initialized.
2012-03-24 19:23:52.627 domaintest[26860:f803] Domain Selected...
2012-03-24 19:24:14.187 domaintest[26860:f803] Leaving Domain...
2012-03-24 19:24:14.188 domaintest[26860:f803] Dismissing View Controller: <DomainSelectionViewController: 0x688f9a0>.
2012-03-24 19:24:14.188 domaintest[26860:f803] Leaving Domain...
2012-03-24 19:24:14.188 domaintest[26860:f803] Presented Domain: <DomainViewController: 0x6891d90>
Current language: auto; currently objective-c
warning: Attempting to create USE_BLOCK_IN_FRAME variable with block that isn't in the frame.
(gdb)