2012-10-23 44 views
17

Tôi đang sử dụng iOS 6 cách mới để chia sẻ thông tin: UIActivityViewController. Để chọn chia sẻ dữ liệu tùy thuộc vào phương tiện truyền thông (facebook, twitter hoặc mail) điều khiển quan điểm của tôi thực hiện UIActivityItemSource Nghị định thư như sau:UIActivityItemSource Protocole đặt đối tượng phức tạp

- (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"; 
} 

Khi tôi trở lại một NSString đơn giản cho activityViewController:itemForActivityType: chuỗi được cũng được sử dụng bởi tôi UIActivityViewController, nhưng tôi không thể tìm thấy cách sử dụng Array!

Theo Apple Tài liệu chúng ta có thể:

Phương pháp này trả về đối tượng dữ liệu thực tế được tác động bởi một đối tượng hoạt động Apple documentation

Có ai đã từng sử dụng UIActivityItemSource Nghị định thư này với Mảng, hoặc là có một hướng dẫn sử dụng đầy đủ để làm điều đó?

Lưu ý: Tôi cũng đã nhận lỗi này trên bàn điều khiển, nó có thể giúp ...

Launch dịch vụ: Đăng ký nhận dạng ứng dụng chưa được biết com.apple.mobilemail thất bại

Launch Services: Không tìm thấy mã định danh ứng dụng com.apple.mobilemail

+2

Bạn đã tìm ra thư nào về com.apple.mobilemail nằm trong bảng điều khiển chưa? –

+1

Lỗi bảng điều khiển chỉ xuất hiện trong trình mô phỏng, nơi ứng dụng thư không tồn tại. Nó có thể bị bỏ qua. – Emil

+0

@Tommecpe: Bạn khắc phục nó như thế nào? – BaSha

Trả lời

16

Sau khi dành một lượng thời gian đáng kể để cố gắng tìm ra điều này, có vẻ như không thể vượt qua nó NSArray mục. Vì vậy, tôi đã mở rộng UIActivityViewController để làm cho nó có thể.

RDActivityViewController

+0

Cảm ơn bạn rất nhiều. Tôi sẽ kiểm tra nó sớm nhất có thể. –

+0

Ai đó có thể xây dựng ở trên không? Phương pháp nào không cho phép NSArray? Tôi gặp vấn đề tương tự và không thể hiểu câu trả lời. Tnx. – jbbenni

+1

Điều này thật tuyệt! Cảm ơn bạn! Tôi đã đập đầu vào tường trong vài giờ vì vấn đề này. RDActivityViewController hoạt động rất tốt. – Dylan

20

Một đối tượng duy nhất phù hợp với UIactivityItemSource chỉ có thể trở lại một mảnh duy nhất của dữ liệu cho activityViewControllerPlaceholderItem:, không NSArray s.

Bạn có thể khắc phục điều này bằng cách tạo và chuyển hai số UIActivityItemSource s trong phần activityItems của số initWithActivityItems: ban đầu. Mỗi nguồn có thể vượt qua giá trị trình giữ chỗ, nhưng có thể trả lại giá trị trống trên itemForActivityType để bạn không thực sự phải sử dụng loại dữ liệu cụ thể đó tùy thuộc vào hoạt động.

Hoặc chỉ sử dụng tiện ích mở rộng tuyệt vời được đề cập trong câu trả lời khác.

Các vấn đề liên quan