【问题标题】:How to make recipients in MFMessageComposeViewController using a variable如何使用变量在 MFMessageComposeViewController 中创建收件人
【发布时间】:2016-08-01 13:32:05
【问题描述】:

我正在尝试使用 MFMessageComposer 为用户预填充短信。我正在尝试使用存储在可变数组中的变量并使用该号码来预填充电话号码。但是,它不适用于收件人部分的以下代码。我尝试将其更改为字符串,并将其添加到数组中。手机什么都做不了。

但是,如果我使用 @[@"123132131235"] 进行手动编号;对于收件人来说,它会起作用。

- (IBAction)smsSend:(id)sender {

    {
        MFMessageComposeViewController *controller = [[MFMessageComposeViewController alloc] init];
        [controller setMessageComposeDelegate:self];
        if([MFMessageComposeViewController canSendText])
        {

            controller.recipients =  [[NSArray alloc] initWithObjects:[Detail valueForKey:@"Phone"], nil];

            NSLog(@"%@",[Detail valueForKey:@"Phone"]);

            controller.body = @"Hello testing";

            [self presentViewController:controller animated:YES completion:NULL];

        }   else {
            NSLog(@"cannot send");
        }
    }
}

请帮帮我。

干杯, 托尼。

【问题讨论】:

  • 你能不能NSLog(@"%@",[Detail valueForKey:@"Phone"])看看你得到了什么?
  • 什么是[Detail valueForKey:@"Phone"]?它返回什么样的对象?
  • 当我做 NSLog(@"%@",[Detail valueForKey:@"Phone"]) 我得到了正确的数字,比如 123456789。
  • [Detail valueForKey:@"Phone"],Detail是可变数组,Phone是我从核心数据添加到可变数组的对象。
  • 你能登录controller.recipients吗?我也想知道[[Detail valueForKey:@"Phone"] class] 是否真的返回了NSString 对象。

标签: ios objective-c sms message


【解决方案1】:

试试这个:

- (IBAction)smsSend:(id)sender  
{
 {
    MFMessageComposeViewController *controller = [[MFMessageComposeViewController alloc] init];
    [controller setMessageComposeDelegate:self];
    if([MFMessageComposeViewController canSendText])
    {
        controller.recipients = [NSArray arrayWithObjects:[Detail valueForKey:@"Phone"], nil];

        controller.body = @"Hello testing";

        [self presentViewController:controller animated:YES completion:NULL];
    }   
    else 
    {
        NSLog(@"cannot send");
    }
 }
}  

我所做的唯一更改是收件人数组分配。收件人数组不是您拥有的数组,因此您应该直接使用对象初始化数组,而不是 [NSArray alloc]

initWithObject 返回一个保留计数为 1 的数组,即您拥有该数组,您必须在某个时候释放它以防止内存泄漏。

arrayWithObject 返回一个自动释放的数组,因此您不必担心在不再需要它时释放它(但如果将其存储在实例变量中,则应保留它以防止自动释放池释放它)

【讨论】:

  • 去掉alloc就不行了。它说“没有'initWithObjects'选择器的已知类方法”
  • 对不起,我的错误,我已经编辑了代码,你现在可以检查吗?
  • 我实际上已经尝试过了,我只是再次尝试。它只是闪烁了一下,然后返回到同一屏幕。
  • 只是为了确认一下,您正在使用 sim 卡在真实设备上进行检查,对吗?
  • 是的,我正在检查真实设备,但没有 SIM 卡。但我用 @[@"123132131235"]; 测试了它。它仍然把我带到了这些消息中。但是如果我用我的变量替换它,它只会闪烁并且不显示。
猜你喜欢
  • 2014-05-08
  • 1970-01-01
  • 2011-07-31
  • 1970-01-01
  • 1970-01-01
  • 2011-05-26
  • 1970-01-01
  • 1970-01-01
  • 2014-04-06
相关资源
最近更新 更多