2

我想提前道歉,因爲我對編程相當陌生,所以如果我不具體,我可以是我很抱歉,但我會盡我所能解釋我的問題盡我所能,無論如何,我是創造需要有發送電子郵件的能力,我還到處看一個應用程序,想盡示例代碼中我能找到並沒有什麼似乎我每次使用代碼的時間來工作,我得到以下錯誤:MFmailComposer錯誤

2013-02-03 20:23:39.372 Tones[16409:c07] Warning: Attempt to present on

其視圖不在窗口層次結構中!

這是我目前正在使用的viewcontroller.h文件中的代碼:

UIViewController <MFMailComposeViewControllerDelegate> 
- (IBAction)Mail:(id)sender; 

,這是我viewcontroller.m文件:

- (IBAction)Mail:(id)sender { 
if ([MFMailComposeViewController canSendMail]) { 
    MFMailComposeViewController *mail = [[MFMailComposeViewController alloc] init]; 

    mail.mailComposeDelegate = self; 

    [mail setSubject:@"Subject"]; 

    NSArray *recipient = [NSArray arrayWithObjects:@"[email protected]", nil]; 
    [mail setToRecipients:recipient]; 

    NSString *body = @"body!"; 
    [mail setMessageBody:body isHTML:NO]; 

    [self presentModalViewController:mail animated:YES]; 
} 
} 
- (void)mailComposeController:(MFMailComposeViewController*)controller didFinishWithResult:(MFMailComposeResult)result error:(NSError*)error 
{ 
[self dismissModalViewControllerAnimated:YES]; 
} 

我也得到一個消息說,自我presentModalViewController和自我dismissModalViewController已被棄用在IOS 6,這是否意味着我不能使用它或我做錯了什麼?

所以對我在做什麼錯的郵件撰寫任何幫助,將不勝感激,並再次對不起,如果我事先並沒有足夠具體的感謝

+0

使用此[自presentViewController:郵件!動畫:YES完成:無];而在使用此[self dismissViewControllerAnimated:YES completion:nil]; –

回答

0

你可以使用presentModalViewController:動畫:以顯示模態視圖 - 控制,但現在推薦使用新的:presentViewController:animated:completion :.新的on擁有一個完成處理程序,您可以更好地控制代碼。小心以上iOS 5.0需要的新方法。如果你的目標是iOS5.0以上,你應該使用新的方法。和dismissModalViewControllerAnimated相同:使用dismissViewControllerAnimated:completion:來代替。

+0

[self presentViewController:<#(UIViewController *)#> animated:<#(BOOL)#> completion:<#^(void)completion#> ,[self dismissViewControllerAnimated:<#(BOOL)#> completion:<#^(void)completion#>,我將什麼放在圓括號裏面用於存在和解僱,對不起,這對我來說是新的 – user1985904

+0

它被稱爲塊並且塊中的代碼將當顯示/解散操作結束時調用,你可以放任何你想要的東西做它。如果你不想做任何事情,你可以寫作^ {}作爲完成。像這樣 '[自presentViewController:mailVC動畫:是完成:^ {}]' 當然,你可以把{}之間你自己的代碼: '[自presentViewController:mailVC動畫:是完成:^ {NSLog(@「Hello block」);}];' – onevcat

+0

現在一切都很好,現在我得到了錯誤,但是在模擬器中點擊按鈕時,它仍然顯示爲「其視圖不在窗口層次結構中」不知道如何解決這個問題 – user1985904

0

警告「警告:嘗試呈現其視圖不在窗口層次結構中!」建議該視圖未在Interface Builder中或以編程方式連接。

已過時的警告是Xcode檢查您在項目設置中使用的API的結果。如果將Xcode項目的「生成設置」的「IOS部署目標」設置爲iOS 6,則標記爲Apple的任何API(如presentModalViewController和dismissModalViewController)都將被標記。

分別使用presentViewController:animated:completion:和dismissViewControllerAnimated:completion:。

+0

[self presentViewController:<#(UIViewController *)#> animated:<#(BOOL)#> completion:<#^(void)completion#>,[self dismissViewControllerAnimated:<#(BOOL)#> completion :<#^(void)completion#>,我在突出顯示的區域中放了什麼,抱歉,因爲我說這對我來說是新的 – user1985904

+0

對於presentViewController:animated:completion:第一個參數modalViewController是您打算的視圖顯示上面的MFMailComposer。換句話說,顯示MFMailComposer之前顯示的視圖。如果您想讓MFMailComposer在顯示時呈現動畫效果(將其視爲視覺效果),則動畫參數就是您指定的位置。類似地,對於dismissViewControllerAnimated:對於completion參數,如果不使用完成處理程序,則可以傳遞NULL。 –

+0

當我點擊我的按鈕時,我仍然收到「其視圖不在窗口層次結構中」 – user1985904

0

像蘇哈說,使用[self presentViewController:mail animated:YES/NO completion:nil];iOS6起,presentModalViewControllerdismissModalViewController已過時,它們與完成使用,這將是零對你的情況。

0
[self presentModalViewController:mail animated:YES]; 

可以通過

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

[self dismissModalViewControllerAnimated:YES]; 

被取代

[self dismissViewControllerAnimated:YES completion:nil]; 
0

嗨,你可以檢查MFMailComposerViewController類存在。 - (空)電子郵件{類emailClass =(NSClassFromString(@ 「MFMailComposeViewController」));如果emailClass =無)如果([emailClass canSendMail] {[自displayComposePage]; }

+0

如果有人想在iOS3.0以下的目標他們的應用程序** **的建議是輝煌的。除此以外... – holex