이 작업을 수행하는 데 정말 어려움을 겪고 있습니다. DomainSelectionViewController 및 DomainViewController라는 연결된보기가있는 두 개의보기 컨트롤러가 있습니다. View Controller를 다루는 Apple 개발자 네트워크에 대한 자습서를 살펴 보겠습니다. 실행하려고하면 EXC_BAD_ACCESS 신호가 나타납니다.dismissViewControllerAnimated에 대한 호출시 EXC_BAD_ACCESS 오류 : 완료 : (iOS5)
DomainSelectionViewController.h
@class DomainViewController;
@interface DomainSelectionViewController : UIViewController
- (IBAction)domainSelected:(id)sender;
- (IBAction)leaveDomain;
@property (retain) DomainViewController * selectedDomain;
@end
domainSelected : 도메인을 나타내는 버튼에 연결되어 여기
각 파일의 관련 발췌. 인터페이스를 클릭하면 DomainViewController의 nib에 정의 된 뷰가 인터페이스의 현재 뷰를 성공적으로 대체합니다.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.");
}
}
domainview에는 "back"을 읽고 자체 exit : function에 연결된 버튼 하나만 포함되어 있습니다.이 함수는 대리자에 leaveDomain을 호출합니다. 이 버튼을 클릭하면 EXC_BAD_ACCESS 호출이 발생합니다. 비슷한 다른 게시물을 보면 EXC_BAD_ACCESS 오류는 일반적으로 할당 취소 된 개체를 호출 할 때 발생하지만 dismiss 호출 바로 전에 print 문은 개체가 아직 있으며 참조 할 수 있음을 보여줍니다. 나는 이것을 보면서 잘못 된 것을 쉽게 신을 수있는 것보다 더 많은 경험을 가진 누군가를 원했습니다. 완전성을 위하여
가 여기에 콘솔의 출력입니다 :
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)
나는 실제로 이것을 이전에 시도했지만 그 결과는 같습니다. (비록 실제로 뷰를 관리하는 루트 작업이되어야한다는 인상하에 있기 때문에 [self.presentedViewController dismissViewControllerAnimated : NO completion : nil] 호출로 leaveDomain 함수에서 수행 했더라도 문제가 발생했습니다. – fromClouds
주로 modalViewControllers를 사용하여이 작업을 수행합니다. 매우 비슷한 방법이지만 작업에 문제가 발생하지 않았습니다. – David
아, 그런데, 그렇지 않은 경우, 위의 메서드를 사용하여 자식 뷰 컨트롤러로 그 명령문을 옮기고, 그냥 당신을 위해 일할 수도 있습니다. 당신이 루트보기에서 self.presentedViewController를 사용하여 그것을 알지만, 같은 함수가 아닙니다. 당신의 프로그램이 작동하지 않으면 컨벤션이 정말로 중요하다고 생각하십시오. – David