2012-10-23 2 views
17

정보를 공유하기 위해 iOS 6 새로운 방법을 사용하고 있습니다 : UIActivityViewController. 미디어 (페이스 북, 트위터 또는 메일)에 따라 공유 데이터를 선택하려면 내보기 컨트롤러는 다음과 같이 UIActivityItemSource 프로토콜을 구현 :UIActivityItemSource Protocole 복잡한 개체를 설정했습니다.

- (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,하지만 난 을 사용할 수있는 방법을 찾을 수 없습니다!

애플 문서에 따르면이 가능해야한다 :

이 방법은 활동 객체에 의해 행동하는 실제 데이터 객체를 반환 Apple documentation

사람이 이제까지이 UIActivityItemSource 프로토콜을 사용 하는가 배열, 또는 그것을 사용하는 전체 튜토리얼을 사용하고 있습니까?

참고 : 나는 또한 콘솔에서이 오류를 가지고, 그것은

시작 서비스 ... 도움이 될 수 : 찾을 수 없습니다 : 알 수없는 응용 프로그램 식별자 com.apple.mobilemail 등록이

시작 서비스 실패 앱 식별자 com.apple.mobilemail

+2

com.apple.mobilemail에 대한 메시지가 콘솔에 무엇인지 알아 냈습니까? –

+1

콘솔 오류는 시뮬레이터에서만 발생하며 메일 앱은 단순히 존재하지 않습니다. 그것은 무시할 수 있습니다. – Emil

+0

@Tommecpe : 어떻게 고쳤습니까? – BaSha

답변

16

이 중 하나를 파악하는 데 많은 시간을 소비 한 후 NSArray 개의 항목을 전달할 수없는 것으로 보입니다. 그래서 나는 가능하게하기 위해 UIActivityViewController을 확장했다.

RDActivityViewController

+0

대단히 감사합니다. 나는 가능한 한 빨리 테스트 할 것이다. –

+0

누군가가 위의 내용을 상세히 설명 할 수 있습니까? 어떤 방법으로 NSArray를 허용하지 않습니까? 나는 같은 문제를 겪고 있고 그 해답을 이해할 수 없다. Tnx. – jbbenni

+1

대단하군요! 고맙습니다! 나는이 문제에 대해 몇 시간 동안 벽에 머리를 두드렸다. RDActivityViewController는 훌륭하게 작동합니다. – Dylan

20

UIactivityItemSource 따르는 단일 객체 만에 대한 더 activityViewControllerPlaceholderItem:NSArray S를 하나의 데이터 조각을 반환 할 수있다.

initWithActivityItems: 부분의 activityItems 부분에 두 개의 UIActivityItemSource을 만들고 전달하여이를 극복 할 수 있습니다. 각 소스는 자리 표시 자 값을 전달할 수 있지만 itemForActivityType에 공백을 반환 할 수 있으므로 실제로 활동에 따라 특정 유형의 데이터를 사용할 필요는 없습니다.

아니면 그냥 다른 답변에서 언급 한 멋진 확장명을 사용하십시오.

관련 문제