2011-11-29 109 views
0

我试图从我的应用程序内发送短信。我写了这段代码,但它似乎不工作。 没有崩溃,没有错误日志,根本没有发生(当然,我试图登录canSendText和结果是1)。发送短信iPhone

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 

    messageComposer = [[MFMessageComposeViewController alloc] init]; 

    if ([MFMessageComposeViewController canSendText]) { 

     [messageComposer setBody:@"Messaggio generato da SMSTest"]; 
     [messageComposer setRecipients:[NSArray arrayWithObject:@"3333333333"]]; 
     [messageComposer setDelegate:self]; 

     [self presentModalViewController:messageComposer animated:YES]; 
    } 
} 

任何人都可以解释我做错了什么?

+0

你测试它在模拟器上?模拟器不能发送短信。 – beryllium

+0

您正尝试在手机上运行应用程序而不是在模拟器上执行此操作,对吗?你将无法从SIM卡发送短信。我不认为它会为此提出任何错误...虽然我无法确切地记得这一点。 – carbonbasednerd

+0

是的我在iPhone上试过。正如我所说,'canSendText'返回1.在模拟器中它将返回0. – Saphrosit

回答

5

的问题是,作为视图加载presentModalViewControllerviewDidLoad工作还没有,但即使可能无法在屏幕上呢。如果你把你的代码放在viewWillAppear:animated,这应该可以工作。

编辑:根据Saphrosit的评论:viewDidAppear:是一个更好的地方做到这一点。

+1

非常好的一点,但即使在'viewWillAppear'视图可能还没有在屏幕上。它将代码放在'viewDidAppear'中,即使最好的解决方案是使用按钮来执行自定义方法。 – Saphrosit

+0

的确是一个很好的观点,我在我的答案中加了一个编辑。 –

0

我用这个成功:

MFMessageComposeViewController *controller = [[MFMessageComposeViewController alloc] init]; 
controller.messageComposeDelegate = self; 
controller.modalPresentationStyle = UIModalPresentationFullScreen; 
[self presentModalViewController:controller animated:YES]; 

注意它的messageComposeDelegate,而不是 '代表' 为你做。

0

当我尝试在模拟器中的代码我得到一个UIAlert说短信是不可用的,因为模拟器无法发送消息。你检查过你的头文件是MFMessageComposeViewControllerDelegate的代表吗?

YourClassName : UIViewController <MFMessageComposeViewControllerDelegate> 
0

//尝试这...这将运行..

MFMessageComposeViewController *controller = [[[MFMessageComposeViewController alloc] init] autorelease]; 
     if([MFMessageComposeViewController canSendText]) 
     { 
      controller.body = @"Hello from Kartik"; 
      controller.recipients = [NSArray arrayWithObjects:@"12356478", nil]; 
      controller.messageComposeDelegate = self; 
      [self presentModalViewController:controller animated:YES]; 
     }