La question concerne une application qui utilise plusieurs vues dans un style de contrôleur UINavigation.MFMailComposeViewController dans le délégué
J'ai une fonction simple dans mon délégué qui peut être utilisé par toutes les vues pour tracer-out message d'erreur
// Dans Appdelegate.m
-(void)popErrorWindow:(NSString *)theError
{
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:nil message:theError
delegate:self cancelButtonTitle:@"OK" otherButtonTitles:@"Report",nil];
[alert show];
[alert release];
}
- (void)alertView:(UIAlertView *)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex {
if (buttonIndex == 1)
{
NSLog(@"report");
[self mailIt:@"error name"];
}
}
Maintenant, voulant avoir un mécanisme enverra par courrier électronique l'erreur ainsi que d'autres données que j'ai créé ceci:
-(void)mailIt:(NSString *)theError {
NSLog(@"Mail it");
pickerMail = [[MFMailComposeViewController alloc] init];
pickerMail.mailComposeDelegate = self;
[pickerMail setSubject:@"error via email"];
NSMutableString *body = [NSMutableString string];
[body appendString:@"Error XXX "];
[pickerMail setMessageBody:body isHTML:YES];
// Problem here:
[self.window presentModalViewController:pickerMail animated:YES];
}
- (void)mailComposeController:(MFMailComposeViewController*)controller didFinishWithResult:(MFMailComposeResult)result error:(NSError*)error
{
// Problem here:
[self.window dismissModalViewControllerAnimated:YES];
//NSLog(@"mail was sent");
}
le problème est dans self.window, ce qui est la bonne façon d'y accéder depuis le délégué, Je veux toujours avoir l'élément mail dans le délégué car toutes les vues peuvent appeler l'alerte d'erreur, et je voudrais avoir seulement une place pour ce mécanisme.
Comment dois-je le faire depuis l'intérieur du délégué, qu'est-ce qui devrait remplacer la self.window?
qu'en est-il de: [self.window presentModalViewController: pickerMail animé: YES]; – chewy
J'ai édité ma réponse – klefevre
Merci jusqu'à présent kl94, En ajoutant: [self.navigationController.parentViewController presentViewController: pickerMail]; Je reçois une erreur: Problème sémantique: Méthode '-presentViewController:' not found (le type de retour par défaut est 'id') – chewy