2017-01-16 2 views
1

Nun, das ist ein sehr kleines Problem, auf dem ich bereits einige Stunden damit verbracht habe zu recherchieren und herauszufinden, warum die App abstürzt.MFMailComposeViewController Absturz auf presentViewController auf iOS 10.2

Nehmen wir an, ich habe zwei View-Controller VC1, VC2 und ich rufe MFMailComposeViewController von VC2.

Bisher habe ich versucht, von VC1 auf VC2 Übergang ..

  1. über performSegueIdentifier
  2. über Storyboard ID
  3. über Storyboard ID mit UINavigationController(rootViewController: vc2)

aber nichts funktionierte. Ich habe sogar versucht, UINavigationViewController in die VC2 einzubetten, aber auch kein Glück.

Unten ist die IBAction Methode in VC2

@IBAction func sendEmail(sender: AnyObject) { 
    if MFMailComposeViewController.canSendMail() { 
     let mailComposerVC = configuredMailComposeViewController() 
     presentViewController(mailComposerVC, animated: true, completion: nil) // CRASH 
    } else { 
     showSendMailErrorAlert() 
    } 
} 


func configuredMailComposeViewController() -> MFMailComposeViewController { 

    let mailComposerVC = MFMailComposeViewController() 
    mailComposerVC.mailComposeDelegate = self 

    mailComposerVC.setToRecipients(["[email protected]"]) 
    mailComposerVC.setSubject("Reg: ") 

    return mailComposerVC 
} 

func showSendMailErrorAlert() { 
    let alert = UIAlertController(title: "Could Not Send Email", message: "Your device could not send e-mail. Please check e-mail configuration and try again.", preferredStyle: .Alert) 
    presentViewController(alert, animated: true, completion: nil) 
} 

Alle Ausgänge und Ereignis Referenzen sind auch gut.

Crashlog

[__NSCFNumber pointSize]: unrecognized selector sent to instance 0xb0000000000000e5 
2017-01-16 16:52:55.887082 Sample[2507:671461] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[__NSCFNumber pointSize]: unrecognized selector sent to instance 0xb0000000000000e5' 

Gelöst:

Das Problem mit der benutzerdefinierten Navigationsleiste ist. Ich habe die UINavigationBar Erscheinung zurückgesetzt, als ich MFMailComposeViewController präsentierte und es auf entlassen setzte. This Beitrag hat mir geholfen, es zu lösen.

Ich habe unten zwei Methoden in einer globalen Datei erstellt.

static func applyGlobalNavigationBarAppearance() { 
    UINavigationBar.appearance().barTintColor = UIColor.blueColor() 
    UINavigationBar.appearance().tintColor = UIColor.whiteColor() 
    UINavigationBar.appearance().titleTextAttributes = [NSForegroundColorAttributeName : UIColor.whiteColor(), NSFontAttributeName: UIFont.systemFontSize()] 
} 

static func applyMailNavigationBarAppearance() { 
    UINavigationBar.appearance().barTintColor = UIColor.whiteColor() 
    UINavigationBar.appearance().tintColor = UIColor.whiteColor() 
    UINavigationBar.appearance().titleTextAttributes = nil 
} 

Antwort

1

Seltsam! Meine Vermutung ist hier, dass Sie etwas (eine Schriftart?) Schlecht über UIAppearance festgelegt haben, und der Mail-Composer ist das erste Mal, dass auf diese Darstellung-Eigenschaft verwiesen wird. Verwendet Ihr Projekt UIAppearance (z. B. UINavigationBar.appearance)? Wenn ja, kommentieren Sie sie jetzt aus. Sehen Sie, wenn das das Problem behebt, dann finden Sie heraus, welcher Anruf der Schuldige ist.

+0

Ja, ich habe eine benutzerdefinierte Navigationsleiste mit benutzerdefinierter Ansicht erstellt, die in VC2 vorhanden sein muss. Ich stimme dem überein, was Sie gesagt haben, indem ich die benutzerdefinierte Navigationsleiste lösche, aber wie kann ich die benutzerdefinierte Navigationsleiste nur für den Mail-Composer entfernen, ohne die VC2-Leiste zu beeinflussen? –

+0

Und ja, es funktionierte, als ich die 'UINavigationBar.appearance()' in 'AppDelegate' –

+1

auskommentierte ich die Lösung. Dieser Beitrag hat mir geholfen, es zu lösen http://stackoverflow.com/questions/15580405/override-uiappearance-property-for-mfmailcomposeviewcontroller. Vielen Dank, dass Sie mich in die richtige Richtung weisen! –

Verwandte Themen