Вопрос касается приложения, которое использует много представлений в стиле контроллера UINavigation.
В моем делегате есть простая функция, которая может использоваться всеми представлениями для вывода сообщения об ошибке
// В 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"];
}
}
Теперь, желая иметь механизм, который будет отправлять сообщение об ошибке вместе с некоторыми другими данными, которые я создал, это:
-(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");
}
Проблема в self.window, который не является правильным способом доступа к нему от делегата,
Я все еще хочу, чтобы почтовый элемент был в делегате, так как все представления могут вызывать предупреждение об ошибке, и я хотел бы иметь только одно место для этого механизма.
Как мне сделать это изнутри делегата, что должно заменить self.window?