2017-11-16 14 views
1

私はUIActivityViewControllerを使用して共有オプションを表示しています。私が共有しようとしている情報は、2つの部分(平易な文字列と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のアプリ上で起こっている、それがTwitterアプリに罰金働いていることに気づきました。

誰もこの問題に遭遇しましたか?もしあなたが私に問題点とその解決方法を教えてもらえますか?

+0

スラックシェアが正しく動作するために、Info.plistに何らかの種類のキーを追加する必要がありますか? – kans

+0

私は同じ問題を抱えています..スラックエクステンション内のバグと思われます... – HeavenlyManBR

+0

@HeavenlyManBR私は以下に投稿したソリューションを試してみてください。それは私のために働いているようだ。 – kans

答えて

2

私は最近同じ問題のようなものに遭遇しました。 activityItems/initWithActivityItems配列内に1つのアイテムしかない場合、Slackとの共有はクラッシュしませんが、それ以上のアイテムがあればクラッシュします。あなたがその特定の問題を経験しているかどうかは分かりませんが、URLとテキストを1つの文字列オブジェクトに結合して、ユースケースに合わせることができます。彼らが取り組む必要があるスラックの問題のようです。

+0

すばらしいことに感謝します。うん、それは、あなたがactivityItems/initWithActivityItems配列に複数の項目を持っているときに問題になります。私はURLとテキストを1つの文字列オブジェクトに結合しようとしました。そのアプローチを使ってもうまくいくのはうまくいくが、twitterのような他のタイプの共有では、共有出力は私が見たいものではない。私は、サムネイル画像とその下の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

関連する問題