2013-06-26 3 views
4

UIActivitiy 및 UIActivityProvider를 사용하도록 코드를 리팩토링하고 있습니다. 트위터가 UIActivityViewController에 더 이상 나타나지 않는 문제가 발생했습니다.여러 UIActivityProvider 클래스를 사용할 때 Twitter가 없습니다.

내 UIActivityProvider 클래스 중 둘 이상이 PlaceholderItem을 UIImage 클래스 객체에 할당 한 경우 Twitter가 표시되지 않는다는 사실을 발견했습니다. 다른 액티비티는 액티비티가 사용할 수없는 자리 표시 자 클래스의 영향을받는 것으로 보입니다.

컨텍스트를 들어, 다음은 설정 코드의 일부입니다 : 내가 사용

NSArray *applicationActivities = @[reviewActivity, myEmailActivity]; 
NSArray *excludeActivities = @[UIActivityTypeAssignToContact, 
           UIActivityTypePrint, 
           UIActivityTypeSaveToCameraRoll, 
           UIActivityTypePostToWeibo]; 

UIActivityItemProvider *screenshotProvider = [[ScreenshotActivityProvider alloc] initWithView :self.scrollView]; 
UIActivityItemProvider *textProvider = [[TextActivityProvider alloc] initWithExchangeDoc:self.docItem]; 
UIActivityItemProvider *imageProvider = [[ImageActivityProvider alloc] initWithExchangeDoc:self.docItem]; 
NSArray *activityItems = @[textProvider, screenshotProvider, imageProvider]; 
                     applicationActivities:applicationActivities]; 
UIActivityViewController *activityVC = [[UIActivityViewController alloc]initWithActivityItems:activityItems 
                     applicationActivities:applicationActivities]; 

샘플 UIActivityItemProvider은 다음과 같습니다

- (id)initWithExchangeDoc :(ExchangeDoc *)docItem 
{ 
    self = [super initWithPlaceholderItem:[UIImage new]]; 
    _docItem = docItem; 
    return self; 
} 

- (id)item 
{ 
    if ([self.activityType isEqualToString:UIActivityTypePostToTwitter]) { 
     return self.docItem.thumbImage; 
    } else { 
     return nil; 
    } 
} 

문제는 initWithPlaceholderItem에있다. UIImage를 자리 표시 자 클래스로 식별하는 또 다른 UIActivityProvider가 있습니다.

사용자 지정 항목 공급자의 목적은 UIActivityViewContrller를 시작한 후 내 데이터 클래스가 어떤 데이터가 제공되었는지 결정할 수 있다고 생각했습니다. 필자의 경우, 스크린 샷 공급자는 Twitter에 아무 것도 제공하지 않습니다. iOS가 내 자리 표시자를보고 Twitter를 실행 가능한 활동으로 제공하지 않기로 결정한 이유는 무엇입니까? 내 제공 업체는 활동 유형에 따라 누가 이미지를 제공할지 결정합니다.

워드 프로세서 placeholderItem에 대해 이런 말 :

만들려는 실제 개체에 대한에 설 수있는 객체입니다. 객체의 내용은 비어있을 수 있지만 객체의 클래스는 나중에 제공하려는 객체의 클래스와 일치해야합니다.

분명히 트위터와 관련하여 나에게 도움이되지 않습니다. 실험으로 모든 placeholderItems를 비어있는 NSStrings 및 Twitter로 변경했으며 다른 모든 활동은 잘 돌아갔다.

누구나이 placeholderItems가 사용되는 항목을 알고 있으며 잘못된 클래스를 설정하면 부정적인 영향을 미치는지 여부를 알 수 있습니까?

죄송합니다. 너무 오래되었습니다. 도와 주셔서 감사합니다.

답변

0

액티비티는 제공하는 각 유형의 개수를 확인합니다. 트위터는 짹짹당 하나의 이미지를 지원하는 것 같습니다. 따라서 임의로 짹짹 이미지 중 하나를 선택하기보다는 이미지 자리 표시자가있는 여러 공급자를 배치하면 활동보기 컨트롤러는 단순히 트위터를 전혀 표시하지 않습니다. 아직 조치 유형을 기반으로 공유되는 항목의 수 또는 유형을 변경하려면이 문제를 해결할 수 없습니다.