【问题标题】:App Crash while trying to share information through slack using UIActivityViewController尝试使用 UIActivityViewController 通过 slack 共享信息时应用程序崩溃
【发布时间】:2018-04-30 13:39:12
【问题描述】:

我正在使用 UIActivityViewController 来显示共享选项。我试图分享的信息由两部分组成(一个纯字符串和一个 url)。该共享正在通过 iMessages、Mail、Notes、Twitter、Facebook 等所有扩展程序运行,但是当我尝试通过 Slack 共享时,该应用程序崩溃了。奇怪的是,只有在我不调试时才会发生崩溃,并且在调试时它永远不会崩溃。

代码:

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 应用上运行良好。

有人遇到过这个问题吗?如果可以,请告诉我是什么问题以及如何解决?

【问题讨论】:

  • 我是否需要在 Info.plist 中添加某种密钥才能使 slack 共享正常工作?
  • 我遇到了同样的问题。似乎是 Slack 扩展中的一个错误...
  • @HeavenlyManBR 你能试试我在下面发布的解决方案,看看是否有效吗?它似乎对我有用。
  • 遇到同样的问题。通过 slack 共享时,我的应用程序崩溃了,并非总是如此,但它经常发生。所有其他应用都运行良好。
  • 通过评论向 AppStore 上的 Slack 团队发送反馈 :) gist.github.com/ashokkumarmw/fe93b1f834f07b5cbda7dd25b01ce9df

标签: ios cocoa-touch slack uiactivityviewcontroller uiactivity


【解决方案1】:

我最近遇到了类似的问题。当您在 activityItems/initWithActivityItems 数组中只有一项时,与 Slack 共享不会崩溃,但如果您有更多项,它将崩溃。我不知道您是否遇到了该特定问题,但一种解决方法是将 url 和文本组合成一个字符串对象,如果这适合您的用例。似乎是他们需要解决的 Slack 问题。

【讨论】:

  • 太好了,感谢您的快速回复。是的,当您在 activityItems/initWithActivityItems 数组中有多个项目时,这是一个问题。我也尝试将 url 和 text 组合成一个字符串对象。使用这种方法可以很好地处理 slack,但对于 twitter 等其他类型的共享,共享输出不是我期望看到的。虽然我希望在一个圆角框中看到该文章的缩略图和标题以及其下方的 url,但它并没有在共享窗口中显示这些内容。不知道如何在这里发布图片。
【解决方案2】:

这对我有用。为 UIActivityItemSource 创建了一个类。我没有将 self 传递给 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

【讨论】:

  • 我收回了,这看起来在我进行此更改的那天有效。但这种崩溃仍在发生。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多