2012-05-03 15 views
19

खोलने का प्रयास करते समय त्रुटि पर एक शून्य मोडल व्यू कंट्रोलर प्रस्तुत करने का प्रयास किया है। मेरे पास एक साधारण ऐप है, जो ईमेल भेजने के लिए एक मोडल व्यू खोलता है। मैं एक्सकोड 4.2 और आईओएस 5 का उपयोग कर रहा हूं, और आईओएस सिम्युलेटर के साथ परीक्षण कर रहा हूं। ऐप अनजान अपवाद 'एनएसआईएनवालिडअर्गमेंट एक्सेप्शन' के कारण ऐप को समाप्त कर रहा है, कारण:
'एप्लिकेशन ने लक्ष्य पर एक शून्य मोडल व्यू कंट्रोलर पेश करने का प्रयास किया।'
'एप्लिकेशन ने मेल कंपोज़र

जब लाइन पर:

[self presentModalViewController:mailComposer animated:YES]; 

हालांकि मैं वस्तु 'mailComposer' प्रारंभ कर दिया है।

कक्षा com_FirstViewController.m:

#import "com_FirstViewController.h" 
... 
@implementation com_FirstViewController 
.... 
.... 
-(void)showEmailComposer { 

Class mailClass = (NSClassFromString(@"MFMailComposeViewController")); 
if (mailClass != nil) 
{ 
    if ([mailClass canSendMail]) { 
        NSLog(@"showEmailComposer: Calling displayComposerSheet"); 
     [self displayComposerSheet]; 

    } else { 
        NSLog(@"showEmailComposer: Calling launchMailAppOnDevice"); 
     [self launchMailAppOnDevice]; 
    } 
} 
else { 
      NSLog(@"showEmailComposer: Calling launchMailAppOnDevice"); 
    [self launchMailAppOnDevice]; 
} 
} 



#pragma mark - 
#pragma mark Compose Mail 

-(void) displayComposerSheet { 

    mailComposer = [[MFMessageComposeViewController alloc] init]; 
    mailComposer.messageComposeDelegate = self; 

    // Set the mail title 
    [mailComposer setTitle:@"Mail Title"]; 

    // Set the recipients 
    NSArray *toRecipients = [NSArray arrayWithObject:@"[email protected]"]; 

    [mailComposer setRecipients:toRecipients]; 

    // EMail Body 
    NSString *mailBody = @"This is the mail body"; 
    [mailComposer setBody:mailBody]; 

    NSLog(@"present the modal view ctlr"); 
    [self presentModalViewController:mailComposer animated:YES]; 
} 
... 
... 

किसी भी संकेत दिए गए हैं?

+0

कोई बात नहीं? हा, कोई पन इरादा नहीं: पी – preynolds

उत्तर

14
mailComposer = [[MFMessageComposeViewController alloc] init]; 

मेरी राय में समस्या का स्रोत है। सिम्युलेटर एसएमएस संदेश भेज सकता है इसका कोई तरीका नहीं है, इसलिए प्रारंभकर्ता विधि पूर्ण वापस आ सकती है। वैसे भी, सौ एक ईमेल भेजने के लिए इच्छुक होने लगते हैं, तो मैं कहना चाहता हूँ आप

mailComposer = [[MFMailComposeViewController alloc] init]; 
+0

बहुत बहुत धन्यवाद! :) यह ठीक काम करता है! – Jean

+2

इसके अलावा, आप यह जांच सकते हैं कि आप MFMessageComposeViewController के canSendText का उपयोग करके संदेश भेज सकते हैं या नहीं। – tokentoken

54

मैं भी एक ऐसी ही समस्या का सामना करना पड़ा उपयोग करने के लिए की जरूरत है। मैंने MFMailComposeViewController का एक उदाहरण आवंटित किया और इसे सामान्य रूप से प्रस्तुत करने का प्रयास किया।

Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'Application tried to present a nil modal view controller on target

ऐसा इसलिए हुआ क्योंकि मेल विकल्प iPhone की सेटिंग में अक्षम किया गया था: मैं भी एक अपवाद हो गया। यह तब भी हो सकता है जब डिवाइस में कोई मेल खाता सेट न हो। तो MFMailCompseViewController उदाहरण nil होगा और इसे सामान्य रूप से पेश करने से दुर्घटना हो जाएगी।

मैंने इस समस्या को हल करने के लिए MFMailComposeViewController की canSendMail विधि का उपयोग किया।

Class mailClass = (NSClassFromString(@"MFMailComposeViewController")); 
if (mailClass != nil) { 
    MFMailComposeViewController * mailView = [[MFMailComposeViewController alloc] init]; 
    mailView.mailComposeDelegate = self; 

    //Set the subject 
    [mailView setSubject:emailSubject]; 

    //Set the mail body 
    [mailView setMessageBody:emailBody isHTML:YES]; 


    //Display Email Composer 
    if([mailClass canSendMail]) { 
     [self.navControl presentModalViewController:mailView animated:YES]; 
    } 
} 
+1

यह मेरी समस्या और एक उत्कृष्ट समाधान था। – mbuc91

+4

मेरी समस्या भी +1 करें। सिवाय मैंने अभी 'if (mailView) {...} 'का उपयोग किया था – Firo

संबंधित मुद्दे