выход из приложения iphone с «SIM-картой не установлена» - PullRequest
1 голос
/ 08 октября 2010

Я использую MFMessageComposeViewController для отправки в приложение смс. в iPhone 4.0, если нет SIM-карты, приложение закрывается. он просто выдает всплывающее сообщение "SIM-карта не установлена". Обратный вызов делегата MessageComposeResultSent. Но приложение выходит. Есть ли способ предотвратить его выход? или как проверить, есть ли в телефоне SIM-карта?

Фрагменты кода ниже:

    /* Open the system sms service, copying the sms text in system clipboard. */
- (void) sendSMSAsURLRequest {
    NSString *phoneNumber = friend.phoneMobile;
    UIPasteboard *pasteBoard = [UIPasteboard generalPasteboard];
    NSString *textUTIType = (NSString *)kUTTypeUTF8PlainText; // add MobileCoreServices.framework for this type.
    [pasteBoard setValue:[self buildSMSText] forPasteboardType:textUTIType];
    NSString *urlString = [NSString stringWithFormat:@"sms:%@", phoneNumber];
    NSURL *url = [[NSURL alloc] initWithString: urlString];
    [[UIApplication sharedApplication] openURL: url];
    [url release];
}

-(void) sendInAppSMS {
    MFMessageComposeViewController *controller = [[[MFMessageComposeViewController alloc] init] autorelease];
    controller.delegate = self;
    if([MFMessageComposeViewController canSendText])
    {
        NSString *smsText = [self buildSMSText];
        controller.body = smsText;
        controller.recipients = [NSArray arrayWithObjects:friend.phoneMobile, nil];
        controller.messageComposeDelegate = self;        
        [self presentModalViewController:controller animated:YES];
    }
}

- (void)messageComposeViewController:(MFMessageComposeViewController *)controller didFinishWithResult:(MessageComposeResult)result
{
    switch (result) {
        case MessageComposeResultCancelled:
            NSLog(@"Cancelled");
            break;
        case MessageComposeResultFailed:{
            NSString *alertString = NSLocalizedString(@"Unknown Error. Failed to send message", @"");
            UIAlertView *alert = [[UIAlertView alloc] initWithTitle:nil message:alertString delegate:self cancelButtonTitle:@"OK" otherButtonTitles: nil];
            [alert show];
            [alert release];
            break;
        }
        case MessageComposeResultSent:
            NSLog(@"SMS sent");
            break;
        default:
            break;
    }    
    [self dismissModalViewControllerAnimated:YES];
}

Ответы [ 2 ]

1 голос
/ 27 июля 2015

Для обнаружения SIM-карты установлена ​​или не используется следующий код:

@import CoreTelephony;


CTTelephonyNetworkInfo *networkInfo = [CTTelephonyNetworkInfo new];
CTCarrier *carrier = [networkInfo subscriberCellularProvider];
if (!carrier.isoCountryCode) {
    UIAlertView *alert = [[UIAlertView alloc]initWithTitle:@"No SIM Card Installed" message:nil delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil, nil];
    [alert show];
}
else{
//Paste Your code here
}
0 голосов
/ 11 октября 2010

Обходное решение, которое я использую сейчас: флаг в делегате приложения,

- (void)applicationWillResignActive:(UIApplication *)aNotification {
    if (shouldExitApp) {
        exit(0);
    }
}

В контроллере представления отправки SMS,

- (void)messageComposeViewController:(MFMessageComposeViewController *)controller didFinishWithResult:(MessageComposeResult)result
{
    ((LuupAppDelegate *)[[UIApplication sharedApplication] delegate]).shouldExitApp = NO;

И снова установите флаг,когда в контроллере просмотра отправки смс,

- (void) viewDidAppear:(BOOL)animated {
    ((LuupAppDelegate *)[[UIApplication sharedApplication] delegate]).shouldExitApp = YES;
    [super viewDidAppear:animated];

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...