iOS вызывает электронную почту и SMS в одном действии - PullRequest
1 голос
/ 24 февраля 2012

Прежде всего, оцените вашу помощь в отношении нижеследующего запроса.

Я разрабатываю приложение для iPhone, в котором требуется, чтобы пользователь нажимал кнопку, и приложение должно вызывать панель электронной почты с тестом по умолчанию, а после того, как пользователь решает «отправить» или «отменить», приложение должно вызвать панель SMS.для действия пользователя «Отправить» или «Отмена»

Приложение выполняет слайд в окне электронной почты с текстом по умолчанию, и как только пользователь нажимает «Отправить» или «Отмена», поток программы возвращается к методу «didFinishWithResult», но позже в окне SMSне отображаетсяКогда я комментирую отправку почты и сразу перехожу на приложение SMS, отображается окно SMS.

Я полагаю, это потому, что когда запрос приложения на электронную почту запускается в другом потоке, а позже, когда поток возвращается обратно к методу didFinishWithResult, отправка SMS не работает.Я не уверен, как решить эту проблему ..

Пожалуйста, помогите

- (void) mailComposeController:(MFMailComposeViewController*)controller didFinishWithResult:(MFMailComposeResult)result error:(NSError*)error 
{
// Notifies users about errors associated with the interface
switch (result)
{
    case MFMailComposeResultCancelled:
        NSLog(@"Result: Mail sending canceled");
        break;
    case MFMailComposeResultSaved:
        NSLog(@"Result: Mail saved");
        break;
    case MFMailComposeResultSent:
        NSLog(@"Result: Mail sent");
        break;
    case MFMailComposeResultFailed:
        NSLog(@"Result: Mail sending failed");
        break;
    default:
        NSLog(@"Result: Mail not sent");
        break;
}
[self showSMSPicker]; <<<<<====== call for SMS
[self dismissModalViewControllerAnimated:YES]; 

, после чего код корректно переходит к методу [self showSMSPicker].В методе showSMSPicker

-(void)showSMSPicker {
Class messageClass = (NSClassFromString(@"MFMessageComposeViewController"));

if (messageClass != nil) {          
    // Check whether the current device is configured for sending SMS messages
    if ([messageClass canSendText]) {
                 MFMessageComposeViewController *smsComposer = [[MFMessageComposeViewController alloc] init];
                 smsComposer.messageComposeDelegate = self;
                if([MFMessageComposeViewController canSendText])  {           
                   smsComposer.body = @"Sending SMS";
                   smsComposer.recipients = [NSArray arrayWithObjects:@"12345678", @"87654321", nil];
                   smsComposer.messageComposeDelegate = self;
                   [self presentModalViewController:smsComposer animated:YES];
              }
               [smsComposer release];
    }
    else {  
            NSLog( @"Device not configured to send SMS.");

    }
}
else {
    NSLog(@"Device not configured to send SMS.");
}
}

Ответы [ 3 ]

1 голос
/ 08 марта 2012

Я полагаю, что анимация вызывает конфликт модального отображения SMS. Также dismissModalViewController устарел, поэтому используйте:

[self dismissViewControllerAnimated:YES completion:^ {
        [self sendSMS];
}]; 
0 голосов
/ 25 февраля 2012

Я использовал метод настройки для достижения этой цели, создал логическое значение, если установлено значение true, а затем в вызове метода ViewDIDAppear метод showSMS

  - (void) viewDidAppear:(BOOL)animated
{
   if (self.isSMSRequired) {
      [self showSMSPicker];
       self.isSMSRequired = FALSE;
    }
}

и

- (void) mailComposeController:(MFMailComposeViewController*)controller didFinishWithResult:(MFMailComposeResult)result error:(NSError*)error 
 {
 // Notifies users about errors associated with the interface
switch (result)
{
case MFMailComposeResultCancelled:
    NSLog(@"Result: Mail sending canceled");
    break;
case MFMailComposeResultSaved:
    NSLog(@"Result: Mail saved");
    break;
case MFMailComposeResultSent:
    NSLog(@"Result: Mail sent");
    break;
case MFMailComposeResultFailed:
    NSLog(@"Result: Mail sending failed");
    break;
default:
    NSLog(@"Result: Mail not sent");
    break;
}
self.isSMSRequired = TRUE;
[self dismissModalViewControllerAnimated:YES]; 

Это сработало ...

0 голосов
/ 24 февраля 2012

Попробуйте отключить модальный почтовый ящик перед тем, как представить модальный текст SMS-сообщения.

- (void) mailComposeController:(MFMailComposeViewController*)controller didFinishWithResult:(MFMailComposeResult)result error:(NSError*)error 
{
// Notifies users about errors associated with the interface
switch (result)
{
    case MFMailComposeResultCancelled:
        NSLog(@"Result: Mail sending canceled");
        break;
    case MFMailComposeResultSaved:
        NSLog(@"Result: Mail saved");
        break;
    case MFMailComposeResultSent:
        NSLog(@"Result: Mail sent");
        break;
    case MFMailComposeResultFailed:
        NSLog(@"Result: Mail sending failed");
        break;
    default:
        NSLog(@"Result: Mail not sent");
        break;
}
[self dismissModalViewControllerAnimated:YES]; 
[self showSMSPicker];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...