UIViewControllerHierarchyConsistency-一个视图一次最多只能有一个视图控制器



我在更新我的一个旧应用程序时遇到问题,这是因为我更新到Xcode 4.5并尝试iOS6后才出现以下错误;

*** Terminating app due to uncaught exception 'UIViewControllerHierarchyInconsistency', reason: 'A view can only be associated with at most one view controller at a time! View <MainView: 0x1e818620; frame = (0 0; 320 476); autoresize = RM+BM; layer = <CALayer: 0x1e818750>> is associated with <MainViewController: 0x1e811850>. Clear this association before associating this view with <UIViewController: 0x21149860>.'

*第一次抛出调用堆栈:(0x377d82a3 0x35ae897f 0x377d81c5 0x38b0dd7b 0x38b0dc6b 0x1dc25 0x38b940 ad 0x38b9405f 0x38b9303d 0x38b938f3 0x38bc5f9 0x38a9809 0x38aa9123 0x37c5c5a3 0x37c51d3 0x37ad173 0x37ad117 0x37abf99 0x37aebd 0x377ed49 0x37cb2eb 0x38fd301 0x1bf03 0x1bea8)libc++abi.dylib:调用terminate引发异常[切换到进程9219线程0x2403]

我认为正是这里造成了这个问题;

mailComposer = [[UIViewController alloc] init];
[mailComposer setView:self];
[mailComposer setModalTransitionStyle: UIModalTransitionStyleCoverVertical];


MFMailComposeViewController *picker = [[MFMailComposeViewController alloc] init];   picker.mailComposeDelegate = self;

当我点击该按钮时,我会进入MFMail编辑器,也就是应用程序崩溃的时候。

有什么想法吗?

提前感谢

编辑-如果我删除前3行,应用程序不会崩溃,但邮件视图不会加载。。。以下是整个代码;

// The actual mail window call

mailComposer = [[UIViewController alloc] init];
[mailComposer setView:self];
[mailComposer setModalTransitionStyle: UIModalTransitionStyleCoverVertical];


MFMailComposeViewController *picker = [[MFMailComposeViewController alloc] init];   picker.mailComposeDelegate = self;
[picker setSubject:@"Hello How are you"];
// Fill out the email body text
NSString *pageLink = @"http://www.apple.com"; 
NSString *iTunesLink = @"http://itunes.apple.com/gb/artist/randomer";
NSString *content = @"blah blah"; 

NSString *emailFileName = [NSString stringWithFormat:@"email_.html"];

NSString *emailFilePath = [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent: emailFileName];
NSString *body = [NSString stringWithContentsOfFile:emailFilePath encoding:NSUTF8StringEncoding error:nil];

body = [body stringByReplacingOccurrencesOfString:@"//TEXT_PLACEHOLDER//" withString:@"replace here"];
body = [body stringByReplacingOccurrencesOfString:@"//FRIENDNAME_PLACEHOLDER//" withString:pageLink];
body = [body stringByReplacingOccurrencesOfString:@"//ITUNES_PLACEHOLDER//" withString:  iTunesLink];
body = [body stringByReplacingOccurrencesOfString:@"//PASSKEY_PLACEHOLDER//" withString:  yourPassword];
body = [body stringByReplacingOccurrencesOfString:@"//PHONETIC_PLACEHOLDER//" withString:  yourPhoneticPassword];


[picker setMessageBody:body isHTML:YES];    
picker.navigationBar.barStyle = UIBarStyleBlack;    
[mailComposer presentModalViewController:picker animated:YES];
[picker release];

}

//HANDLE THE MAIL EVENTS
////////////////////////
  • (void)mailComposeController:(MFMailComposeViewController*)控制器didFinishWithResult:(MFMailComposeResult)结果错误:(NSError*)错误{//通知用户与接口相关的错误开关(结果){case MFMailComposeResultCancelled:打破case MFMailComposeResultSaved:打破case MFMailComposeResultSent:打破case MFMailComposeResultFailed:打破

    default:
    {
    UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Email" message:@"Sending Failed - Unknown Error :-("
    delegate:self cancelButtonTitle:@"OK" otherButtonTitles: nil];
    [alert show];
    [alert release];
    }
    break;
    

    }[mailComposer解雇ModalViewControllerAnimated:YES];//[mailComposer.view.superview removeFromSuperview];}

让邮件组成视图控制器显示的主要内容是使用当前活动的UIViewController来显示它。你没有分享足够的代码让我清楚,但如果self在这种情况下是UIViewController,你需要做:

[self presentViewController:picker animated: YES completion:nil];

如果self不是UIViewController,请将上面代码中的self替换为引用当前UIViewController的变量。

相关内容

最新更新