В моем приложении очень важно знать, отправлено СМС или нет. Для проверки я использую этот метод делегата:
- (void)messageComposeViewController:(MFMessageComposeViewController *)controller didFinishWithResult:(MessageComposeResult)result{
switch (result) {
case MessageComposeResultCancelled: {
[NSThread detachNewThreadSelector:@selector(SMScancelled) toTarget:self withObject:nil];
}
break;
case MessageComposeResultSent: {
[NSThread detachNewThreadSelector:@selector(SMSsent) toTarget:self withObject:nil];
}
break;
case MessageComposeResultFailed: {
[NSThread detachNewThreadSelector:@selector(SMSfailed) toTarget:self withObject:nil];
}
break;
default:
break;
}
[self dismissViewControllerAnimated:YES completion:nil];
}
Моя проблема в том, что при тестировании я включаю режим полета в настройках (чтобы проверить, что произойдет), а затем пытаюсь отправить SMS (используя свое приложение). Естественно, iOS не может его отправить, и система сообщает мне об этом. В приложении сообщений также показано, что мне не удалось его отправить. Но метод делегата по-прежнему возвращает MessageComposeResultSent вместо MessageComposeResultFailed. Такая ситуация также возникает, когда я тестирую на другом телефоне, в котором нет SIM-карты.
Я тестирую это на iOS 7 и iOS 8.
В документации написано, что MessageComposeResultSent означает "Пользователь успешно поставил в очередь или отправил сообщение". Это означает, что поведение, которое я ожидаю, правильное.
Итак, как узнать, было ли успешно отправлено мое последнее SMS или отправка не удалась?