6

Attualmente sono in esecuzione problemi con iOS7 e MFMailComposeViewController. A volte (spesso, ma non sempre), ho l'incidente seguente in occasione della presentazione del MFMailComposeViewController:Composizione di posta elettronica in iOS 7: errore di asserzione in - [MFComposeSubjectView layoutSublayersOfLayer:]

** * errore di asserzione in - [MFComposeSubjectView layoutSublayersOfLayer:], /SourceCache/UIKit/UIKit-2903.23/UIView.m : 8540

Ecco come vi presento il controllore:

if ([MFMailComposeViewController canSendMail]) 
    { 
     MFMailComposeViewController* mailVC = [[MFMailComposeViewController alloc] initWithNibName:nil bundle:nil]; 
     mailVC.mailComposeDelegate = self; 

     [mailVC setSubject:@"blablabla"]]; 
     [mailVC setMessageBody:@"blablabla" isHTML:NO]; 
     mailVC.modalPresentationStyle = UIModalPresentationFormSheet; 
     mailVC.modalTransitionStyle = UIModalTransitionStyleCoverVertical; 

     if(isIpad) { 
      [sharedParentViewController presentViewController:mailVC animated:YES completion:nil]; 
     } else { 
      [sharedNavigationViewController presentViewController:mailVC animated:YES completion:nil]; 
     } 
    } 

sharedParentViewController e sharedNavigationViewController sono definiti macro per accedere alla visualizzazione della radice di controllo in tutto il mondo in app.

Ho impostato un punto di interruzione su tutte le eccezioni ma, sfortunatamente, non si interrompe mai.

Con iOS6 e iOS5, tutto funziona correttamente, qualsiasi idea di cosa posso provare a risolvere questo problema?

EDIT:

Ecco il registro blocchi:

Stack Trace 

Auto Layout still required after executing -layoutSubviews. MFComposeSubjectView's implementation of -layoutSubviews needs to call super. 

0 CoreFoundation      0x3099ff4b <redacted> + 130 
1 libobjc.A.dylib      0x3b1366af objc_exception_throw + 38 
2 CoreFoundation      0x3099fe25 <redacted> + 0 
3 Foundation       0x31347fe3 <redacted> + 90 
4 UIKit        0x33112e63 <redacted> + 538 
5 QuartzCore       0x32d99c6b <redacted> + 142 
6 QuartzCore       0x32d9547b <redacted> + 350 
7 QuartzCore       0x32d9530d <redacted> + 16 
8 QuartzCore       0x32d94d1f <redacted> + 230 
9 QuartzCore       0x32d94b2f <redacted> + 314 
10 QuartzCore       0x32d8e85d <redacted> + 56 
11 CoreFoundation      0x3096b1cd <redacted> + 20 
12 CoreFoundation      0x30968b71 <redacted> + 284 
13 CoreFoundation      0x30968eb3 <redacted> + 730 
14 CoreFoundation      0x308d3c27 CFRunLoopRunSpecific + 522 
15 CoreFoundation      0x308d3a0b CFRunLoopRunInMode + 106 
16 GraphicsServices     0x355c7283 GSEventRunModal + 138 
17 UIKit        0x33177049 UIApplicationMain + 1136 
18 teleobs        0x00037921 main + 116 
19 teleobs        0x000378a8 start + 40 
+1

Are u utilizzando selettori aspetto di impostare i colori della barra di navigazione? se lo fai, prova a non usare le immagini per generare colori! –

+0

@ChamiraFernando No, ho controllato in questo momento, i selettori di UIA non sono affatto utilizzati. – Gl0ub1l

+0

o modifichi i colori del controller di navigazione utilizzando l'immagine? intendo [coloricolorWithPatternImage]? –

risposta

0

Credo che questo problema a causa di:

  1. Autolayouts è abilitato (in Storyboard, ecc)
  2. C'è UIView categoria (o più) con chiamate di - (void)layoutSubviews

Controllare tutte le categorie UIView (nel progetto) se chiama - (void)layoutSubviews, provare a commentare questo invito per il test. O semplicemente spegnere autolayouts

0

Forse perché si tenta di initialize la MFMailComposeViewController con initWithNibName:bundle: invece di init. Provalo in questo modo, e dovrebbe funzionare.

MFMailComposeViewController *mailComposer = [[MFMailComposeViewController alloc] init]; 
mailComposer.mailComposeDelegate = self; 
[mailComposer setSubject:emailTitle]; 
[mailComposer setMessageBody:message isHTML:NO]; 

Se si tratta di un problema con il macros si dovrebbe meglio prima provare a chiamare il MFMailComposeViewController modo normale

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

senza un interruttore e se funziona si può guardare come accenderlo.

+0

Un normale 'init' chiama' [self initWithNibName: nil bundle: nil] '. –

0

Nel mio caso il problema è stato che ho provato a presentViewController: quando è stato presentato ancora UIActionSheet. Ha la sua finestra che sovrasta la nostra. Ho aggiunto un piccolo ritardo, 0.1f secondi e ho chiamato la presentazione di MFMailComposeViewController nel blocco dispatch_after. Dopo di ciò ha iniziato a funzionare correttamente.

Provare ad aumentare il ritardo fino a 0.3f se 0.1f non funziona.

Suppongo che avremo lo stesso problema per UIAlertView e altre classi che utilizzano quelle finestre proprie per la presentazione.

Questa soluzione non è elegante, quindi se qualcuno ha una decisione migliore sarei felice di saperlo.

0

in classe MFComposeSubjectView, si riscrive - layoutSubviews ma non si chiama [super layoutSubviews]

Problemi correlati