0

我正在尝试向联系人列表中的联系人发送电子邮件。我正在使用一个ABPeoplePickerNavigationController. 用户选择联系人的电子邮件后,会发生以下情况:

- (BOOL)peoplePickerNavigationController:(ABPeoplePickerNavigationController *)peoplePicker shouldContinueAfterSelectingPerson:(ABRecordRef)person property:(ABPropertyID)property identifier:(ABMultiValueIdentifier)identifier {

    if(property == kABPersonEmailProperty){
        [self dismissModalViewControllerAnimated:YES];
        ABMultiValueRef emails = ABRecordCopyValue(person, property);
        int index = ABMultiValueGetIndexForIdentifier(emails, identifier);
        NSString *emailValueSelected = (__bridge NSString*)ABMultiValueCopyValueAtIndex(emails, index);

        MFMailComposeViewController* controller = [[MFMailComposeViewController alloc] init];
        controller.mailComposeDelegate = self;
        [controller setSubject:@"the subject"];
        [controller setMessageBody:@"Hello there" isHTML:NO];
        [controller setToRecipients:[[NSArray alloc] initWithObjects:emailValueSelected, nil]];
        if (controller){
            [self presentModalViewController:controller animated:YES];
        }
        return NO;
    }
    return YES;
}

emailValueSelected变量具有正确的电子邮件值,并且所有代码似乎都可以毫无问题地执行(甚至是if(controller){...}语句的主体)。

问题是没有任何反应,电子邮件控制器从未显示。我已经尝试过[self presentViewController:controller animated:YES completion:nil][self presentModalViewController:controller animated:YES];

我在我的应用程序的另一部分使用完全相同的代码来发送电子邮件并且它工作正常,所以我猜它与人员选择器有关。

4

3 回答 3

0

你在使用标签栏控制器吗?那你应该试试

[self.tabBarController presentModalViewController:controller animated:YES];

您还可以设置断点并执行 po 控制器以查看控制器是否已正确初始化(即它不是 nil)

于 2012-04-17T00:30:14.650 回答
0

问题是被解雇的人员选择器模式与试图出现的电子邮件模式发生冲突。我通过使人物选择器模式立即消失而不是动画来解决它。

if(property == kABPersonEmailProperty){
    [self dismissModalViewControllerAnimated:NO];
    //etc...
}
于 2012-04-17T13:35:03.937 回答
0

我成功地做了:

[peoplePicker presentViewController:picker animated:YES completion:nil];

代替:

[self presentViewController:picker animated:YES completion:nil];
于 2012-09-17T19:33:17.143 回答