2017-11-16 5 views
1

공유 옵션을 표시하는 데 UIActivityViewController를 사용하고 있습니다. 내가 공유하려고하는 정보는 두 부분 (일반 문자열과 URL)으로 구성됩니다. 공유는 iMessages, Mail, Notes, Twitter, Facebook 등의 모든 확장 기능을 통해 작동하지만 Slack을 통해 공유하려고 할 때 앱이 충돌합니다. 기이 한 일은 내가 디버깅하지 않고 디버깅하는 동안 충돌을 일으키지 않는 경우에만 충돌이 발생한다는 것입니다.응용 프로그램 UIActivityViewController를 사용하여 여유 공간을 통해 정보를 공유하는 동안 크래시가 발생합니다.

코드 :

UIActivityViewController *activityVC = [[UIActivityViewController alloc] initWithActivityItems:@[title, self] applicationActivities:nil]; 
[self presentViewController:activityVC animated:YES completion:nil]; 

# UIActivityItemSource methods 
- (id)activityViewControllerPlaceholderItem:(UIActivityViewController *)activityViewController { 
    return url; 
} 

- (id)activityViewController:(UIActivityViewController *)activityViewController itemForActivityType:(NSString *)activityType { 
    return url; 
} 

- (NSString*)activityViewController:(UIActivityViewController *)activityViewController subjectForActivityType:(NSString *)activityType { 
    return title; 
} 

- (NSString *)activityViewController:(UIActivityViewController *)activityViewController dataTypeIdentifierForActivityType:(NSString *)activityType { 
    return @"com.test.url"; 
} 

- (UIImage *)activityViewController:(UIActivityViewController *)activityViewController thumbnailImageForActivityType:(NSString *)activityType suggestedSize:(CGSize)size { 
    return image; 
} 

나는이 충돌이 Flipboard는 응용 프로그램에 무슨 일이 일어나고하고 트위터 응용 프로그램에서 잘 일하고 것으로 나타났습니다.

누구에게이 문제가 발생 했습니까? 문제가 무엇인지 그리고 어떻게 해결할 수 있는지 알려 주시기 바랍니다.

+0

슬랙 공유가 제대로 작동하려면 Info.plist에 어떤 종류의 키를 추가해야합니까? – kans

+0

동일한 문제가 발생했습니다 ... Slack 확장 프로그램에서 버그가있는 것 같습니다 ... – HeavenlyManBR

+0

@HeavenlyManBR 제가 아래에 게시 한 솔루션을 시도해 볼 수 있습니까? 그것은 나를 위해 일하는 것 같습니다. – kans

답변

2

저는 최근에 같은 문제가 발생했을 때 실행했습니다. ActivityItems/initWithActivityItems 배열에 하나의 항목 만있을 때 슬랙과 공유는 중단되지 않지만 그 이상인 경우 충돌이 발생합니다. 특정 문제가 발생했는지 모르겠지만 해결 방법은 URL과 텍스트를 하나의 문자열 객체로 결합하여 사용 사례에 맞출 수있는 방법입니다. 슬랙의 문제를 해결할 필요가있는 것 같습니다.

+0

좋은 답변을 주셔서 감사합니다. 예, activityItems/initWithActivityItems 배열에 항목이 두 개 이상있는 경우 문제가됩니다. URL과 텍스트를 하나의 문자열 객체로 결합하려고했습니다. 그 접근 방식을 사용하면 느슨해 지는데 문제가 없지만, 트위터와 같은 다른 유형의 공유에서는 공유 출력이 내가보기를 기대하지 않습니다. 미리보기 이미지와 그 아래에있는 URL이있는 해당 기사의 제목이 둥근 상자에 모두 표시 될 것으로 예상되지만 공유 창에 해당 내용이 표시되지 않습니다. 내가 이미지를 게시 할 수있는 방법을 모르겠습니다. – kans

0

이것은 나를 위해 일했습니다. UIActivityItemSource에 대한 클래스를 만들었습니다. 자체을 activityItems/initWithActivityItems 배열에 전달하는 대신 itemSource를 전달했습니다.

ActivityItemSource *itemSource = [[ActivityItemSource alloc] initWithTitle:title url:url thumbnail:thumbnail]; 
UIActivityViewController *activityVC = [[UIActivityViewController alloc] initWithActivityItems:@[title, itemSource] applicationActivities:nil]; 
[self presentViewController:activityVC animated:YES completion:nil]; 

ActivityItemSource.m 

@interface ActivityItemSource() <UIActivityItemSource> 

@property (strong, nonatomic) NSString *title; 
@property (strong, nonatomic) NSURL *url; 
@property (strong, nonatomic) UIImage *thumbnail; 
@end 

@implementation ActivityItemSource 

- (instancetype)initWithTitle:(NSString *)title url:(NSURL *)url thumbnail:(UIImage *)thumbnail { 
    self = [self init]; 
    if (self) { 
     self.title = title; 
     self.url = url; 
     self.thumbnail = thumbnail; 
    } 

    return self; 
} 

- (id)activityViewControllerPlaceholderItem:(UIActivityViewController *)activityViewController { 
    return self.url; 
} 

- (id)activityViewController:(UIActivityViewController *)activityViewController itemForActivityType:(NSString *)activityType { 
    return self.url; 
} 

- (NSString*)activityViewController:(UIActivityViewController *)activityViewController subjectForActivityType:(NSString *)activityType { 
    return self.title; 
} 

- (UIImage *) activityViewController:(UIActivityViewController *)activityViewController thumbnailImageForActivityType:(NSString *)activityType suggestedSize:(CGSize)size { 
    return self.thumbnail; 
} 

@end 
+0

나는이 변화를 만들었던 그 날에 그것을 보았다. 그러나이 충돌은 여전히 ​​일어나고 있습니다. – kans

관련 문제