Подтвердить что ты не робот

UIActivityItemSource Protocole задает сложный объект

Я использую новый способ iOS 6 для обмена информацией: UIActivityViewController. Чтобы выбрать общие данные в зависимости от носителя (facebook, twitter или mail), мой контроллер представления реализует протокол 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";
}

Когда я возвращаю простой NSString для activityViewController:itemForActivityType:, строка хорошо используется моим UIActivityViewController, но я не могу найти способ использовать Array!

Согласно Apple Documentation, это должно быть возможно:

Этот метод возвращает фактический объект данных, на который должен воздействовать объект активности Документация Apple

Кто-нибудь когда-либо использовал этот UIActivityItemSource протокол с массивами или использует полный учебник для этого?

Примечание. Я также получил эту ошибку на консоли, это может помочь...

Запуск служб: не удалось зарегистрировать неизвестный идентификатор приложения com.apple.mobilemail

Запуск служб: невозможно найти идентификатор приложения com.apple.mobilemail

4b9b3361

Ответ 1

Проведя значительное количество времени, пытаясь понять это, кажется, что невозможно передать ему NSArray элементов. Поэтому я расширил UIActivityViewController, чтобы сделать это возможным.

RDActivityViewController

Ответ 2

Единственный объект, соответствующий UIactivityItemSource, может возвращать только один фрагмент данных для activityViewControllerPlaceholderItem:, no NSArray s.

Вы могли бы преодолеть это, создав и передав два UIactivityItemSource в части activityItems исходного initWithActivityItems:. Каждый источник может передать значение placeholder, но может возвращать что-то пустое на itemForActivityType, поэтому вам не нужно использовать этот конкретный тип данных в зависимости от активности.

Или просто используйте это прохладное расширение, упомянутое в другом ответе.