2013-11-27 82 views
0

我不確定是否正確理解MFMailComposeViewController。我期待有一個現有視圖的視圖控制器顯示在我的屏幕上。我可以看到FTViewController的視圖。但郵件作曲家從不出現。MFMailComposeViewController顯示空視圖

我已將原始問題簡化爲最低限度。

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
    { 
     self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; 
     // Override point for customization after application launch. 

     FTViewController *vc = [[FTViewController alloc]init]; 
     self.window.rootViewController = vc; 
    .. 
    } 

在FTViewController.m

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    FTTest *test = [[FTTest alloc] init]; 
    [test testmeup]; 
} 

FTTest

#import <MessageUI/MessageUI.h> 

@interface FTTest : UIViewController <MFMailComposeViewControllerDelegate> 

@implementation FTTest 

- (void)testmeup 
{ 
    BOOL ok = [MFMailComposeViewController canSendMail]; 
    if (!ok) 
     return; 
    MFMailComposeViewController* vc = [MFMailComposeViewController new]; 
    vc.mailComposeDelegate = self; 
    [self presentViewController:vc animated:YES completion:nil]; 
} 
+1

嘗試檢查您是否可以在呈現視圖控制器之前發送郵件(它可能未配置)。你也可以用它作爲調試來告訴你這是否是問題。 [canSendMail](https://developer.apple.com/library/ios/documentation/MessageUI/Reference/MFMailComposeViewController_class/Reference/Reference.html#//apple_ref/occ/clm/MFMailComposeViewController/canSendMail) – hukir

+0

是否有任何電子郵件帳戶在你的郵件? – chancyWu

回答

0

有沒有在郵件的任何電子郵件帳戶?如果所有帳戶都被禁用或刪除

[MFMailComposeViewController canSendMail] 

返回NO,則無法顯示。

+0

我再次檢查,它可以發送郵件。 'canSendMail'返回true。 – Houman

1

我終於找到了解決我的問題。

如果我將相同的代碼從- (void)viewDidLoad移動到一個可操作的方法,它就像一個魅力。因此,用戶需要先按下按鈕或採取行動才能使其工作。

- (IBAction)gogogo:(id)sender 
{ 
    FTTest *test = [[FTTest alloc] init]; 
    [test testmeup]; 
} 

我相信蘋果已經這樣做了,以確保用戶知道哪些電子郵件正在發送出去。 本來我打算利用這種方法捕捉異常,並通過電子郵件將它們發送給我自己,如solution here中所述。

也許我忽略了一些東西,隨時發表評論。

+0

與我在其他答案的評論中所說的完全一樣;你只是簡單地調用'testmeup'方式太早。在'viewDidLoad'中,就像'application:didFinish ...'一樣,沒有界面。就這麼簡單。 – matt

相關問題