Objective c UIActivityItemSource协议集复杂对象

Objective c UIActivityItemSource协议集复杂对象,objective-c,ios6,uiactivityviewcontroller,Objective C,Ios6,Uiactivityviewcontroller,我正在使用iOS 6新的信息共享方式:UIActivityViewController。要根据媒体(facebook、twitter或邮件)选择共享数据,my view controller执行UIActivityItemSource协议,如下所示: - (IBAction)onShareButton:(UIButton *)sender { UIActivityViewController *activityViewController = [[UIActivityViewContr

我正在使用iOS 6新的信息共享方式:
UIActivityViewController
。要根据媒体(facebook、twitter或邮件)选择共享数据,my view controller执行
UIActivityItemSource
协议,如下所示:

- (IBAction)onShareButton:(UIButton *)sender
{

    UIActivityViewController *activityViewController = [[UIActivityViewController alloc] initWithActivityItems:@[self] applicationActivities:nil];

    activityViewController.excludedActivityTypes = @[UIActivityTypeMessage, UIActivityTypeAssignToContact, UIActivityTypeCopyToPasteboard, UIActivityTypeMessage, UIActivityTypePostToWeibo, UIActivityTypePrint, UIActivityTypeSaveToCameraRoll];
    [self presentViewController:activityViewController animated:YES completion:^{}];
}

#pragma mark - UIActivityItemSource Protocol

- (id)activityViewController:(UIActivityViewController *)activityViewController itemForActivityType:(NSString *)activityType {
    if ([activityType isEqualToString:UIActivityTypePostToFacebook]) {
        NSArray *items = @[@"message facebook", [NSURL URLWithString:@"http://www.myUrlFacebook.com"]];
        return items;
    } else if ([activityType isEqualToString:UIActivityTypePostToTwitter]) {
        NSArray *items = @[@"message twitter", [NSURL     URLWithString:@"http://www.myUrlTwitter.com"]];
        return items;
    } else if ([activityType isEqualToString:UIActivityTypeMail]) {
        NSArray *items = @[@"message mail", [NSURL URLWithString:@"http://www.myUrlMail.com"]];
        return items;
    }

        NSArray *items = @[@"Not a proper Activity", [NSURL URLWithString:@"http://www.myUrlMail.com"]];
    return items;
}

- (id)activityViewControllerPlaceholderItem:(UIActivityViewController *)activityViewController {
    return @"PlaceHolder";
}
当我为
activityViewController:itemForActivityType:
返回一个简单的NSString时,我的
UIActivityViewController
很好地使用了该字符串,但我找不到使用
数组的方法

根据苹果公司的文档,应该可以:

此方法返回活动对象要处理的实际数据对象

是否有人将此
UIActivityItemSource
协议用于数组,或者是否有使用完整教程来实现此目的

注意:我在控制台上也遇到了这个错误,这可能会有帮助

启动服务:注册未知的应用标识符com.apple.mobilemail失败

启动服务:找不到应用标识符com.apple.mobilemail


在花了大量时间试图弄明白这一点后,似乎不可能向其传递
NSArray
项。因此,我扩展了
UIActivityViewController
,使之成为可能


符合
UIactivityItemSource
的单个对象只能返回
activityViewControllerPlaceholderItem:
,无
NSArray
s的单个数据段

您可以通过在初始
initWithActivityItems:
activityItems
部分中创建并传递两个
UIActivityItemSource
来克服这一问题。每个源都可以传递一个占位符值,但可以在
itemForActivityType
上返回空白值,因此实际上不必根据活动使用特定类型的数据


或者只使用另一个答案中提到的很酷的扩展。

非常感谢。我会尽快测试它。有人能详细说明一下吗?什么方法不允许NSArray?我也有同样的问题,无法理解答案。这太棒了!非常感谢。为了这个问题,我已经把头撞在墙上几个小时了。RDActivityViewController工作得很好。@rdougan我在我的swift项目中面临集成问题:'-[RDActivityViewController copyWithZone:]:发送到实例0x133220d60的无法识别的选择器'您是否发现了控制台中关于com.apple.mobilemail的消息?控制台错误只发生在模拟器中,邮件应用程序根本不存在的地方。它可以被忽略。@Tommepe:你是如何修复它的?